Sun Studio 12: dbx コマンドによるデバッグ

呼び出しのトレース

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

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

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


逆順での注意:
demo% f77 -silent -g ShowTrace.f
demo% a.out
MAIN が calc を呼び出し、calc が calcb を呼び出します。
*** TERMINATING a.out
*** Received signal 11 (SIGSEGV)
Segmentation Fault (core dumped)
quil 174% dbx a.out
23 行目で実行が停止します。
a.out のシンボル情報を読んでいます
...
(dbx) run
calcb が calc の 9 行目呼び出されました。
実行中: a.out
(プロセス id 1089)
calc が MAIN の 3 行目で呼び出されました。
シグナル SEGV (フォルトのアドレスにマッピングしていません) 関数
calcb 行番号 23 ファイル "ShowTrace.f"
   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"
[3] MAIN() 行番号 3 ファイル "ShowTrace.f"
(dbx)
実行が停止した時点から呼び出しシーケンスを表示します。