事前定義済み変数の使用
特定の読み取り専用の 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 の先頭の単語は、dlopen または dlclose のどちらが発生したかによる + (プラス記号) または - (マイナス記号) です。
|
$newhandlerid
|
最後に作成されたハンドラの ID。この変数は、ハンドラを削除するコマンドのあとの未定義の値です。ハンドラを作成した直後に変数を使用します。dbx では、複数のハンドラを作成する 1 つのコマンドに対してすべてのハンドラ ID を取り込むことはできません。
|
$firedhandlers
|
停止の原因となった最近のハンドラ ID のリストです。リスト上のハンドラは、status コマンドの出力に * (アスタリスク) でマークされます。
|
$proc
|
現在デバッグ中のプロセスの ID
|
$lwp
|
現在の LWP の ID。
|
$thread
|
現在のスレッドの ID
|
$newlwp
|
新しく作成された LWP の ID。
|
$newthread
|
新しく作成されたスレッドの ID。
|
$prog
|
デバッグ中のプログラムの絶対パス名
|
$oprog
|
$prog の前の値で、これは exec() のあとにデバッグしていたものに戻るために使用され、このときにプログラムのフルパス名は - (ダッシュ) に戻ります。$prog がフルパス名に展開され、$oprog がコマンド行または debug コマンドに指定されているプログラムパスを含みます。exec() が 2 回以上呼び出されると、オリジナルのプログラムには戻れません。
|
$exec32
|
dbx バイナリが 32 ビットの場合は true です。
|
$exitcode
|
プログラムの最後の実行ステータスを終了します。この値は、プロセスが実際には終了していない場合、空文字列になります。
|
$booting
|
イベントがブートプロセス中に発生すると、true に設定されます。新しいプログラムは、デバッグされるたびに、共有ライブラリのリストと位置を確認できるよう、まず実行されます。プロセスはそのあと終了します。このシーケンスは「ブート」と呼ばれます。
ブートが起こっても、イベントはすべて使用可能です。この変数は、たとえばデバッグの実行中に発生する sync および syncrtld イベントと、通常の実行中に発生するイベントを区別するために使用します。
|
$machtype
|
プログラムがロードされた場合、そのマシンタイプ sparcv8、sparcv8+、sparcv9、x86、または x86_64 を返します。そうでない場合、unknown を返します。
|
$datamodel
|
プログラムがロードされた場合、そのデータモデル ilp32 または lp64 を返します。そうでない場合、unknown を返します。ロードしたばかりのプログラムのモデルを見つけるには、.dbxrc ファイルで次を使用します。
when prog_new -perm {
echo machine: $machtype $datamodel;
}
|
|
次の例に、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 コマンドの本体内および特定のイベントに対してのみ有効です。
表 3 sig イベントに固有の変数
|
|
$sig
|
イベントを発生させたシグナル番号
|
$sigstr
|
$sig の名前
|
$sigcode
|
適用可能な場合、$sig のサブコード
|
$sigcodestr
|
$sigcode の名前
|
$sigsender
|
必要であれば、シグナルの送信者のプロセス ID
|
|
表 4 exit イベントに固有の変数
|
|
$exitcode
|
_exit(2) または exit(3) に渡された引数の値、または main の戻り値
|
|
表 5 dlopen および dlclose イベントに有効な変数
|
|
$dlobj
|
dlopen または dlclose されたロードオブジェクトのパス名
|
|
表 6 sysin および sysout イベントに有効な変数
|
|
$syscode
|
システムコール番号
|
$sysname
|
システムコール名
|
|
表 7 proc_gone イベントに固有の変数
|
|
$reason
|
signal、exit、kill、または detach のいずれか
|
|
表 8 thr_create イベントに固有の変数
|
|
$newthread
|
新しく作成されるスレッドの ID (t@5 など)
|
$newlwp
|
新しく作成される LWP の ID (l@4 など)
|
|
表 9 access イベントに有効な変数
|
|
$watchaddr
|
アドレスが書き込まれたり、読みだされたり、実行されたりします。
|
$watchmode
|
次のいずれかです。r は読み込み、w は書き込み、x は実行。そのあとに次のいずれかが続きます。a は後、b は前。
|
|