Oracle® Developer Studio 12.5: dbx コマンドによるデバッグ

印刷ビューの終了

更新: 2016 年 6 月
 
 

事前定義済み変数の使用

特定の読み取り専用の 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
プログラムがロードされた場合、そのマシンタイプ sparcv8sparcv8+sparcv9x86、または 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
signalexitkill、または detach のいずれか
表 8  thr_create イベントに固有の変数
変数
説明
$newthread
新しく作成されるスレッドの ID (t@5 など)
$newlwp
新しく作成される LWP の ID (l@4 など)
表 9  access イベントに有効な変数
変数
説明
$watchaddr
アドレスが書き込まれたり、読みだされたり、実行されたりします。
$watchmode
次のいずれかです。r は読み込み、w は書き込み、x は実行。そのあとに次のいずれかが続きます。a は後、b は前。