2. GDB が扱うファイルの解説

 GDB は、シンボルテーブルを読み込んでプログラムの実行を開始するために、 デバッグ対象のプログラム名を知る必要があります。過去のプログラム 実行で発生したコアダンプをデバッグするためには、GDB にコアダンプした ファイル名を教えてあげなければなりません。


2.1 引数によるファイルの指定

 実行形式ファイルとコアダンプ・ファイルを記述する最も普通の方法は、 GDB を起動する時に指定することができる2つの引数を使うことです。 最初の引数は実行コードとシンボル情報を収めたファイルの指定に、 2番目の引数は (もし指定したならば) コアダンプしたファイル名の 指定として使用されます。従って、
gdb progm core
は、`progm' が実行可能なプログラムであり、`core' が コアダンプした調査用ファイルだと指定したことになります(プログラムを 対話的にデバッグする場合、このコアダンプ・ファイルは必要では ありません)。

 GDB を起動する時のオプションと引数に関する全ての 説明は、“12 GDB のオプションと引数”を参照して下さい。


2.2 コマンドによるファイルの指定

 通常、あなたは、GDB が解析すべきファイルを GDB 起動時の引数として 与えることでしょう。しかし、時々、GDB セッション中に異なった ファイルに変更する必要が発生することがあります。また、利用したい ファイル名の記述を忘れたまま GDB を起動してしまうこともあるでしょう。 これらの状況に陥った時は、新しいファイルを記述するための GDB の コマンドが便利です。
exec-file filename
実行プログラムを filename で指定します。もし、あなたが ディレクトリを記述せず、GDB がファイルをワーキングディレクトリで 見つけることができなかった場合、GDB はコマンド検索対象 ディレクトリ・リストである環境変数 PATH を使って、 シェルが実行対象のプログラムを探すのと同様の方法でファイルを 見つけます。

symbol-file filename
filename からシンボルテーブルの情報を読み取ります。 必要なら、PATH が検索されます。 ほとんどの場合、あなたは `exec-file'`symbol-file' コマンドを同一のファイルに対して用いるでしょう。

引数なしの `symbol-file' は、GDB のシンボルテーブルを クリアします。

`symbol-file' コマンドは、すぐに全てのシンボルを読み込んでしまう わけではありません。そのかわり、このコマンドはどんなソースファイルと どのようななシンボルが与えられたのかを調べるために、シンボルテーブルを 高速にスキャンします。詳細は、必要が生じた時、一つのソースファイル 単位に後から読み込まれます。

この2ステージ読み込み方式の目的は、GDB の起動を早くすることにあります。 シンボルテーブルの詳細を調べるために、個々のソースファイルが読み込まれて いることをあなたに対して報告する臨時メッセージを除いて、 たいていの場合これらのことは目につきません(`set verbose' コマンドは、表示されるこれらのメッセージを コントロールします; “1 GDB の入出力の慣例”をご覧下さい)。

しかしながら、あなたは時々、まだソースファイル内のデータが読み 込まれていない関数に関するバックトレース結果を見てしまう場合が あるでしょう; これらの出力では、シンボルテーブルの詳細がないと 表示できないような引数の値といった情報が、省略表示されています。

シンボルテーブルが COFF フォーマットで格納されていた場合、 `symbol-file' は全てのシンボルテーブル・データを即座に 読み込みます。私たちは、COFF に対して2ステージ読み込み方式を わざわざインプリメントするつもりはありません。

core-file filename
“メモリの内容”として利用されるコアダンプ・ファイルがどこにあるのかを 指定します。コアダンプには書き込み可能なメモリパートのみ含まれており; 読み出し専用のパートは実行可能ファイル上にあることに注意して下さい。

引数なしの `core-file' は、コアファイルを使用しないことを意味 します。

あなたのプログラムが GDB の下で実際に動作している時、コアファイルは 無視されることに注意して下さい。プログラム実行中にコアファイルを デバッグしたくなった場合、動作中のプログラムのサブプロセスを kill する必要があります。この場合、`kill' コマンドを利用して 下さい(“4.6 チャイルドプロセスを kill するには”をご覧下さい)。

add-file filename address
`add-file' コマンドは、filename というファイルから 追加シンボルテーブル情報を読み込みます。filename いうファイルを 実行中のプログラムに対して動的にロードする時、このコマンドを使います。 @var{address} は、そのファイルが読み込まれる先のメモリアドレスです; GDB は、自分自身ではこれを指定できません。

filename のシンボルテーブルは、初めは `symbol-file' コマンド によってシンボルテーブルに追加されます。あなたは、 `add-file' コマンドをいつでも利用できます; 従って、新しいシンボルデータは、古いものに追加保持されます。 `symbol-file' コマンドは GDB が既に読み込んだ全てのシンボル データを忘れてしまいます; これは、GDB においてシンボルデータが忘れ去られる唯一のケースです。

info files
GDB がカレントに利用している、シンボルを読み込むための実行可能 ファイル、コアダンプ・ファイルの名称を表示します。
 これら3つのファイル記述用コマンドは、引数として絶対・相対パスの ファイル名を引数として許していますが、GDB はファイル名を絶対パスに 変換し、それを記憶しています。

 `symbol-file' コマンドは、簡易変数、変数履歴、そして全ての ブレークポイントと自動表示する式を GDB に忘れさせます。これは、 これらの情報が、GDB の中から捨てられる古いシンボルデータの一部として、 内部的に記憶されているシンボルとデータ型へのポインタを持っている からです。


目次に戻る