dbx コマンドによるデバッグ

呼び出しのトレース

プログラムがコアダンプで終了したため、終了するまでの呼び出しシーケンスが必要な場合があるとします。このシーケンスをスタックトレースといいます。

where コマンドは、プログラムフローの実行が停止した位置、およびどのようにその位置に達したかを表示します。これを呼び出し先ルーチンのスタックトレースといいます。

ShowTrace.f は、呼び出しシーケンスでコアダンプを数レベル深くする、つまりスタックトレースを示すために考えられたプログラムです。

実行が停止した時点から呼び出しシーケンスを表示します。


demo% f77 -silent -g ShowTrace.f   (注 1)
demo% a.out
*** TERMINATING a.out
*** Received signal 11 (SIGSEGV)   (注 2)
Segmentation Fault (core dumped)
demo% dbx a.out
a.out のシンボル情報を読み込んでいます。
...
(dbx) run
実行中: a.out
(process id 1089)
シグナル SEGV (フォルトのアドレスにマッピングしていません) 関数 calcb 行番号 23  ファイル "ShowTrace.f"  (注 3)
   23                   v(j) = (i * 10)
(dbx) where -V
=>[1] calcb(v = ARRAY , m = 2) 行番号 23 ファイル "ShowTrace.f"
  [2] calc(a = ARRAY , m = 2, d = 0) 行番号 9 ファイル "ShowTrace.f"  (注 4)
  [3] MAIN() 行番号 3 ファイル "ShowTrace.f"
(dbx)

注 1: 順序が逆になっていることに注意してください。

注 2: MAINcalc を呼び出し、calccalcb を呼び出しています。

注 3: 23 行目で実行が停止しました。

注 4: calcMAIN の 3 行目で呼び出さ れました。