Oracle Solaris Studio 12.2: dbx コマンドによるデバッグ

事前定義済み変数

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

変数  

定義  

$ins

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

$lineno

現在の行番号 (10 進数) 

$vlineno

現在の表示行番号 (10 進数) 

$line

現在の行の内容 

$func

現在の関数の名前 

$vfunc

現在の表示関数の名前 

$class

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

$vclass

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

$file

現在のファイルの名前 

$vfile

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

$loadobj

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

$vloadobj

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

$scope

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

$vscope

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

$funcaddr

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

$caller

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

$dllist

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

$newhandlerid

最後に作成されたハンドラの ID。この変数は、ハンドラを削除するコマンドのあとの未定義の値です。ハンドラを作成した直後に変数を使用します。dbx では、複数のハンドラを作成する 1 つのコマンドに対してすべてのハンドラ ID を取り込むことはできません。

$firedhandlers

停止の原因となった最近のハンドラ ID のリストです。リストにあるハンドラには、status コマンドの出力時に「*」が付きます。

$proc

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

$lwp

現在の LWP の ID 

$thread

現在のスレッドの ID 

$newlwp

新しく作成した LWP の lwp ID 

$newthread

新しく作成したスレッドのスレッド ID 

$prog

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

$oprog

$prog の前の値は、$prog が「-」に戻るときに exec() に続いて、デバッグしていたものに戻る場合に使用します。$prog がフルパス名に展開され、$oprog がコマンド行または debug コマンドに指定されているプログラムパスを含みます。exec() が 2 回以上呼び出されると、オリジナルのプログラムには戻れません。

$exec32

dbx バイナリが 32 ビットの場合は true です。

$exitcode

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

$booting

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

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

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


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

when コマンドに対して有効な変数

次の変数は、when コマンドの本体内でのみ有効です。

$handlerid

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


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

when コマンドと特定のイベントに対して有効な変数

一部の変数は、以下の表に示すように、when コマンドの本文内および特定のイベント対してのみ有効です。

表 B–1 sig イベントに固有の変数

変数  

内容の説明  

$sig

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

$sigstr

$sig の名前

$sigcode

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

$sigcodestr

$sigcode の名前

$sigsender

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

表 B–2 exit イベントに固有の変数

変数  

内容の説明  

$exitcode

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

表 B–3 dlopen および dlclose イベントに固有の変数

変数 

内容の説明  

$dlobj

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

表 B–4 sysin および sysout イベントに固有の変数

変数 

内容の説明  

$syscode

システムコールの番号 

$sysname

システムコールの名前 

表 B–5 proc_gone イベントに固有の変数

変数 

内容の説明  

$reason

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

表 B–6 thr_create イベントに固有の変数

変数 

内容の説明  

$newthread

新しく作成されるスレッドの ID (t@5 など)

$newlwp

新しく作成される LWP の ID (l@4 など)

表 B–7 watch イベントに有効な変数

変数 

内容の説明  

$watchaddr

アドレスが書き込まれたり、読みだされたり、実行されたりします。 

$watchmode

次のいずれかです。r は読み込み、w は書き込み、x は実行。そのあとに次のいずれかが続きます。a は後、b は前。