7. ソースファイルの調査

 GDB は、あなたのプログラムがどのソースファイルからコンパイルされて いるかを知っており、それらのテキストの一部を表示できます。プログラムが 停止したならば、GDB は、停止した行の内容を自発的に表示します。 同様に、あなたがスタックフレームを選択した場合 (“6.3 フレームの選択”をご覧下さい)、 GDB はそのフレームで実行が停止している行の場所を表示します。あなたは また、その他の系統だったコマンドを使うことで、ソースファイルの様々な 部分を見ることができます。


7.1 ソース上の行の表示

 ソースファイル上の行を表示するには `list' コマンド (省略形 `l') を使います。あなたが表示したいファイルの部分を記述 するには、色々な方法があります。

 次は、`list' コマンドが最もよく利用される形態です:

list linenum
カレントのソースファイルの linenum で示される行を中心として、 そのまわりの10行を表示します。

list function
function で示される関数のはじまりを中心として、そのまわりの 10行を表示します。

list
更に10行の内容を表示します。もし、最後に表示された行が `list' コマンドによるものだったならば、これは最後に表示された行に 続く10行を表示します; しかしながら、最後に表示された行がスタックフレーム (“A HREF="chapter-06.html">6. スタックの調査”をご覧下さい) の 一部の表示としての単一の行の表示だった場合、このコマンドは、その行を 中心とした、そのまわり10行を表示します。

list -
最後に表示した行の前の10行を表示します。
 引数なしの RET`list' コマンドをリピートすることは、 `list' と入力した場合と全く同じです。これは、 同様な行の表示を行う場合に便利です。例外は引数 `-' を指定した時に おこります; この引数は、各々の繰り返しがファイルの中を前の方に移動するように、 繰り返し手順を保存します。

 一般的に、`list' コマンドは、あなたに対して、ゼロ、1つ、又は2つの、 行に関する記述を期待します。行に関する記述はソース上の行番号を示し; これらの書き方には様々な方法がありますが、その結果はいつも、 あるソース上の行番号を示しています。 次に、`list' コマンドの引数として可能な全ての引数の説明を 示しましょう:

list linespec
linespec で指示される部分を中心とした10行を表示します。

list first,last
first から last までの行を表示します。 両方の引数は行に関する記述です。

list ,last
last が最後になるような10行を表示します。

list first,
first から10行を表示します。

list +
最後に表示した行に続く10行を表示します。

list -
最後に表示した行の前の10行を表示します。

list 以前に説明した通り。
 次に、単一のソースラインを記述するための方法である―全ての種類の 行に関する記述を示します。
linenum
カレントのソースファイルの linenum の位置を示します。 `list' コマンドが2つの行に関する記述を指定されたときは、 最初の行に関する記述と同一のソースファイルを参照します。

+offset
最後に表示された行から offset 先の行を示します。 `list' コマンドが2つの行に関する記述を指定されたときの 2番目の行に関する記述として使われた場合は、最初の行に関する 記述から offset 分下の行を示します。

-offset
最後に表示された行から offset 前の行を示します。

filename:linenum
filename のソースファイル上の linenum の位置を示します。

function
function で表される関数の本体がはじまる部分の開始中括弧の行を 示します。

filename:function
filename のソースファイル上の、function で表される関数の 本体がはじまる部分の開始中括弧の行を示します。ファイル名は、 異なったソースファイル間でピタリと一致する関数名が存在する場合に のみ必要です。

*address
address というプログラムアドレスを含む行を示します。 address には式が書けます。
 もう一つの別のコマンドは、プログラムのソースラインをプログラム アドレスにマップさせるためのものです。
info line linenum
linenum というソースラインのコンパイルされたコードの開始と終了 アドレスを表示します。

`x' コマンドのデフォルトの調査対象アドレスは行の開始アドレスに 変更されるので、`x/i' はマシンコードの調査を十分に 行えます(“8.5.1 メモリの調査”をご覧下さい)。また、このアドレスは簡易変数 $_ の 値としても保存されます(“8.8 簡易変数”をご覧下さい)。


7.2 ソースファイルの検索

 正規表現 (regular expression) を使ってカレントのソースファイルを検索 するための、2つのコマンドがあります。

 `forward-search regexp' というコマンドは、最後にリスト した1行の次から開始して各々の行を正規表現 regexp にマッチするまで チェックします。 このコマンドは、正規表現にマッチするパターンが見つかった行を表示します。 コマンドの省略形は `fo' です。

 `reverse-search regexp' というコマンドは、最後にリスト した1行の前から開始して各々の行を正規表現 regexp にマッチするまで 逆方向にチェックします。 このコマンドの省略形は `rev' です。


7.3 ソースが存在するディレクトリの指定

 実行対象のプログラムにはソースファイルの名称だけが記録してあり、それが どこのディレクトリでコンパイルされたのかという記録までは持っていません。 GDB は、ソースファイルを探すためのディレクトリのリストを記憶することが できます; これはソースパスと呼ばれています。GDB がソースファイルを必要と した時、リスト内の全てのディレクトリを、それらがリストに表れる順に 要望するファイル名を見つけるまで試みます。この場合、実行可能 コマンド・サーチパスは、この目的に使用されないということに注意して 下さい。もし、カレント・ワーキングディレクトリがソースパスに表れて いない場合は、これも参照されません。

 あなたが GDB を起動した時、ソースパスはカレント・ワーキングディレクトリ しか含んでいません。他のディレクトリを付け加える場合は、`directory' コマンドを使用します。

directory dirnames...
dirname で示されるディレクトリを、ソースパスの最後に付け加えます。 数個のディレクトリ名をこのコマンドに与える場合は、 ホワイトスペースか `:' で区切ります。

directory
ソースパスを、GDB が動作しているカレント・ワーキングディレクトリのみに リセットします。これは、確認を要求します。

このコマンドがサーチパスからディレクトリを削除した後は、その前に発見して 既に読み込まれているソースファイルのディレクトリも変更した方がいい でしょう。このことを正確に実行するため、このコマンドは発見済みのソース ファイルを保持している GDB のテーブルを消去します。

info directories
ソースパスを表示します: その中にどのディレクトリが含まれているかを示します。
 `directory' コマンドはソースパスを最後に追加するため、GDB が既に 発見しているファイルについては何も影響を及ぼしません。もし、 そのようなことが起こって欲しくないディレクトリをソースパスが含み、 それらのディレクトリが、あなたのソースファイルと名称がマッチしている ので誤って読み込まれてしまうようなファイルを含んでいる場合、この 状況を修整するための方法は次の通りです:
  1. ソースパスの一番最初に出てくるようにしたいディレクトリを選択します。 `cd' コマンドを使って、カレント・ワーキングディレクトリを変更 します。

  2. 引数なしの `directory' コマンドを使って、ソースパスを現在の ディレクトリのみという状態にリセットします。

  3. 適当な引数を持つ `directory' コマンドを使って、 あなたがソースパスに追加したいその他のディレクトリを追加します。


目次に戻る