1.コアファイル プログラム実行中にセグメンテーション エラー (コア ダンプ) が発生すると、プログラムは実行を停止し、コア ファイルが生成されます。コア ファイルは、プログラムの実行状態のメモリ イメージです。 gdb を使用してコア ファイルをデバッグすると、プログラム セグメンテーション エラーが発生した場所をすばやく見つけることができます。もちろん、実行可能プログラムをコンパイルするときにデバッグ情報を生成するには、-g コンパイル オプションを追加する必要があります。 プログラムがアクセスするメモリがシステムによって割り当てられたメモリ領域を超えると、セグメンテーション エラー (コア ダンプ) が発生します。したがって、セグメンテーション エラーが発生する主な状況は次のとおりです。 (1)存在しないメモリアドレスにアクセスする。 コアダンプはコア ダンプとも呼ばれます。プログラム実行中に例外が発生し、プログラムが異常終了すると、オペレーティング システムはプログラムの現在のメモリ状態をコア ダンプと呼ばれるコア ファイルに保存します。 コアとはコアメモリのことで、コイルで作られたメモリです。半導体産業が活況を呈している現在、コアメモリを使用する人はいなくなりました。しかし、多くの場合、メモリは依然としてコアと呼ばれています。 2. コアファイルが生成されるかどうかを制御する (1)ulimit -cコマンドを使用して、コアファイル生成スイッチを表示します。結果が 0 の場合、この機能は無効になっており、コア ファイルは生成されないことを意味します。 (2)ulimit -c filesizeコマンドを使用して、コアファイルのサイズを制限します(ファイルサイズはKB単位です)。生成された情報がこのサイズを超えると切り捨てられ、不完全なコア ファイルが生成されます。このコア ファイルをデバッグすると、gdb はエラーを表示します。たとえば、ulimit -c 1024 です。 (3)ulimit -c unlimitedを使用すると、コアファイルのサイズは無制限になります。 ターミナルでのコマンド ulimit -c unlimited は一時的な変更に過ぎず、再起動後は有効になりません。永続的な変更を行うには、次の 3 つの方法があります。 (1)/etc/rc.localにulimit -c unlimitedという行を追加する (2)/etc/profileにulimit -c unlimitedという行を追加する (3)/etc/security/limits.confの末尾に次の2行を追加します。 @root ソフトコア無制限 @root ハードコア無制限 3.コアファイル名と生成パス core のデフォルトのファイル名は core.pid です。pid はセグメンテーション エラーを生成するプログラムのプロセス ID を指します。 コア ファイルの名前と生成パスを変更する場合、関連する構成ファイルは次のとおりです。 /proc/sys/kernel/core_pattern: フォーマットされたコア ファイルの場所とファイル名を設定できます。たとえば、元のファイルの内容は core-%e です。 パラメータのリストは次のとおりです。
通常、変更する必要はなく、デフォルト設定を使用できます。 4. gdb のコアファイルのデバッグ手順 gdb を使用してコア ファイルをデバッグし、プログラム内のセグメンテーション エラーの場所を見つける場合、実行可能プログラムは -g コンパイル コマンド オプションを使用してコンパイルする必要があることに注意してください。 gdb のコア ファイルをデバッグするための一般的な手順は次のとおりです。最初の手順が推奨されます。 具体的なステップ 1: (1) gdbを起動し、コアファイルを入力します。コマンドの形式は、gdb [execファイル] [コアファイル]です。 (2)gdbに入ったら、セグメンテーション違反の場所を探す:whereまたはbt 使用例: ソースプログラム内の特定のファイルの特定の場所を特定できず、セグメンテーション エラーが発生しました。 具体的なステップ2: (1) gdbを起動し、コアファイルを入力します。コマンドの形式は、gdb –core=[コアファイル]です。 (2)gdbを入力した後、コアファイルに対応するシンボルテーブルを指定します。コマンドの形式は、file [exec file]です。 具体的なステップ3: (1) gdbを起動し、コアファイルを入力します。コマンドの形式は、gdb -c [コアファイル]です。 5. セグメンテーション違反の場所を見つけるための他の方法 gdb を使用してシングルステップ デバッグを実行し、セグメンテーション エラーの場所を見つけることができます。 gdb の使用例の詳細については、以下を参照してください。 上記は、Linux で gdb を使用してコア ファイルをデバッグする方法の詳細です。Linux gdb によるコア ファイルのデバッグの詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。 以下もご興味があるかもしれません:
|
<<: Day.js をベースにした JavaScript での日付処理のよりエレガントな方法
>>: MySQLでルートユーザーのパスワードを変更する方法
まず、href 属性と onclick イベントの実行順序について説明します。マウスが a タグをク...
たとえば、<u>には終了文字がなく、ブラウザはそれを認識します。 SHTML は Ser...
目次1. 最も適切なフィールド属性を選択する2. フィールドをNOT NULLに設定してみる3. サ...
目次1 システムスループットの簡単な紹介2 試験方法2.1 クライアントテストツール2.1.1 GE...
1. 先頭のあいまいクエリではインデックスを使用できません (「%XX」や「%XX%」など)コード値...
目次トピックmysqlの追加、削除、変更、クエリを入力しますMySQL トランザクション処理私は M...
インターネット上にはMySQL 5.7.17のインストールチュートリアルがほとんどなく不十分なので、...
Linux タスク管理 - バックグラウンド実行と終了fg、bg、ジョブ、&、ctrl + ...
上部のメニュー バーに検索ボックスを配置するのは一般的なシナリオですが、検索機能がそれほど頻繁に使用...
一般的なページング方法: 1. エスカレーター方式エスカレーター方式では通常、前のページ/次のページ...
この記事では、MySQL のスロー クエリ操作について例を挙げて説明します。ご参考までに、詳細は以下...
Docker 公式ドキュメント: https://docs.docker.com/ Docker は...
目次背景DHCPの設定DHCP ファイル (動的ホスト構成プロトコル) の編集tftp 設定sysl...
本日のプロジェクト最適化中に、MySQL に問題が発生しました: 定義者として指定されたユーザー (...
1. テーブル内のフィールドの大文字と小文字の区別を設定するgorm クエリを使用する場合、MySQ...