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

事前定義済み変数

読み取り専用の ksh 事前定義済み変数がいくつか用意されています。以下に示す変数は常に有効です。

表 6-2 事前定義済み変数

変数 

定義 

$pc

現在のプログラムカウンタのアドレス (16 進数) 

$ins

現在の命令の逆アセンブル 

$lineno

現在の行番号 (10 進数) 

$line

現在の行の内容 

$func

現在の関数の名前 

$vfunc

現在「表示している」関数 

$class

$func が所属するクラスの名前

$vclass

$vfunc が所属するクラスの名前

$file

現在のファイルの名前 

$vfile

現在表示しているファイルの名前 

$loadobj

現在のロードオブジェクトの名前 

$vloadobj

現在表示している現在のロードオブジェクトの名前 

$scope

逆引用符表記での現在の PC のスコープ 

$vscope

現在表示している逆引用符表記での PC のスコープ 

$funcaddr

$func のアドレス (16 進数)

$caller

$func を呼び出している関数の名前

$dllist

dlopen イベントまたは dlclose イベントの後、dlopen または dlclose された直後のロードオブジェクトのリストが格納されます。$dllist の中の先頭の単語は実際には "+" または "-" です。これは、dlopendlclose のどちらが発生したかを示します。

$newhandlerid

最後に作成されたハンドラの ID 

$proc

現在デバッグ中のプロセスの ID 

$lwp

現在の LWP の ID 

$thread

現在のスレッドの ID  

$prog

デバッグ中のプログラムの絶対パス名 

$oprog

$prog の古い値または元の値。これは、exec() に続いて、デバッグしていたものに戻る場合に便利です。

$exitcode

プログラムの最後の実行状態を終了します。この値は、プロセスが実際には終了していない場合、空文字列になります。 

たとえば、whereami は次のように実装できます。


function whereami {
  echo Stopped in $func at line $lineno in file $(basename $file)
  echo "$lineno¥t$line"
}

イベント固有の変数

次に示す変数は、when の本体内部でのみ有効です。

$handlerid

本体の実行中、$handlerid にはそれが属する when コマンドの ID が格納されます。次のコマンドは同じ結果になります。


when X -temp { do_stuff; }
when X  { do_stuff; delete $handlerid; }

$booting

イベントがブートプロセス中に起こると、true (真) に設定されます。新しいプログラムは、デバッグされるたびに、まず共有ライブラリのリストと位置を確認できるよう、ユーザーに通知されないまま実行されます。プロセスはその後終了します。ブートはこのようなシーケンスで行われます。

ブートが起こっても、イベントはすべて使用可能です。この変数は、デバッグ中に起こる sync および syncrtld のイベントと、通常の実行中に起こるこれらのイベントを区別するときに使用してください。

イベント別の有効変数

sig イベントに固有の変数

$sig

イベントを発生させたシグナル番号 

$sigstr

$sig の名前

$sigcode

適用可能な場合、$sig のサブコード

$sigcodestr

$sigcode の名前

$sigsender

必要であれば、シグナルの送信者のプロセス ID 

exit イベントに固有の変数

$exitcode

_exit(2) または exit(3) に渡された引数の値、または main の戻り値

dlopen イベントと dlclose イベントに固有の変数 (パラメータが与えられた場合のみ)

$dlobj

dlopen または dlclose されたロードオブジェクトのパス名

sysin イベントと sysout イベントに固有の変数

$syscode

システムコールの番号 

$sysname

システムコールの名前 

proc_gone イベントに固有の変数

$reason

シグナル、終了、強制終了、または切り離しのいずれか。