Solaris モジューラデバッガ

組み込み dcmd

[ addr ] ::bp [+/-dDestT] [-c cmd] [-n count] sym ...
addr :b [cmd ... ]

指定された場所にブレークポイントを設定します。::bp dcmd は、指定されたアドレスまたはシンボル (dcmd の前にある明示的な式で指定されたオプションのアドレスを含む) ごと、そして、dcmd の後ろにある文字列または即値ごとにブレークポイントを設定します。引数には、指定された特定の仮想アドレスを示すシンボル名または即値を指定できます。シンボル名を指定した場合、ターゲットプロセス内でまだ評価できないシンボルを参照することがあります。つまり、まだ読み込んでいないオブジェクト内のオブジェクト名や関数名を参照することがあります。この場合、ターゲット内のブレークポイントは延期され、指定された名前に一致するオブジェクトが読み込まれるまでアクティブ (有効) になりません。オブジェクトが読み込まれると、このブレークポイントは自動的に有効になります。共用ライブラリ内に定義されたシンボル上のブレークポイントを設定する場合、アドレスは実際のシンボル定義ではなく、対応する PLT (Procedure Linkage Table) エントリを参照する可能性があるので、必ず、アドレス式ではなく、シンボル名を使用する必要があります。PLT エントリ上で設定されたブレークポイントは、そのPLT エントリが後で実際のシンボル定義に解釈されると、実行時リンクエディタによって上書きされることがあります。-d-D-e-s-t-T-c、および -n オプションは、::evset dcmd で使用するのと同じ意味になります (この節の後半を参照)。dcmd の :b 形式を使用した場合、ブレークポイントは dcmd の前にある式で指定した仮想アドレスだけに設定されます。:b dcmd の後ろにある引数は連結され、コールバック文字列となります。この文字列にメタキャラクタが含まれる場合、文字列を引用符で囲む必要があります。

function ::call [ arg ... ]

kmdb のみを使用している場合、オペレーティングシステムカーネルに定義されている、指定の function を呼び出します。function 式は、既知のいずれかのカーネルモジュールのシンボルテーブルに定義されている関数のアドレスと一致する必要があります。式の引数を指定すると、それらの引数は値によって渡されます。文字列引数を指定すると、それらの引数は参照によって渡されます。


注 –

::call コマンドは、十分に注意して使用する必要があり、本稼働システムには絶対に適用してはなりません。オペレーティングシステムカーネルは、指定された関数を実行するために実行を再開しません。したがって、呼び出されている関数は任意のカーネルサービスを決して利用してはならず、いかなる理由でもブロックしてはなりません。このコマンドを使用するときは、呼び出す関数の副作用を十分に認識している必要があります。


::cont [SIG]
:c [SIG]

デバッガを中断し、ターゲットプログラムを継続し、指定されたソフトウェアイベントが発生したあとにターゲットプログラムが終了または停止するまで待機します。-o nostop オプションを有効にしてデバッガを動作中のプログラムに接続しており、ターゲットがすでに動作している場合、この dcmd は単に、指定されたソフトウェアイベントが発生したあとにターゲットプログラムが終了または停止するまで待機します。オプションのシグナルの名前または番号 (signal (3HEAD) のマニュアルページを参照) を引数として指定した場合、このシグナルはターゲットの実行を再開するための一部として、すぐにターゲットに送られます。SIGINT シグナルを追跡している場合、ユーザー定義割り込み文字 (通常は ^C) を入力すると、非同期的にデバッガに制御を戻すことができます。この SIGINT シグナルは自動的に消去され、次回ターゲットが継続される場合、ターゲットにはこのシグナルは送られません。現在、ターゲットプログラムが動作していない場合、::cont は、::run を実行した場合と同じように、新しいプログラムの実行を起動します。

addr ::delete [id | all]
addr :d [id | all]

指定された ID 番号のイベント指定子を削除します。id 番号引数はデフォルトで 10 進数として解釈されます。オプションのアドレスを dcmd の前に指定した場合、指定された仮想アドレスに関連するすべてのイベント指定子 (つまり、そのアドレスに影響するすべてのブレークポイントまたはウォッチポイント) が削除されます。特別な引数「all」を指定した場合、すべてのイベントが削除されます。ただしスティッキー (T フラグ) がマークされたイベントは除きます。::events dcmd はイベント指定子の現在のリストを表示します。

::events [-av]
$b [-av]

ソフトウェアイベント指定子のリストを表示します。各イベント指定子には一意の ID 番号が割り当てられ、この ID 番号を使用すると、後でイベント指定子を削除または変更できます。デバッガはまた、独自の内部イベントを追跡用に有効にできます。このようなイベントが表示されるのは、-a オプションを指定した場合だけです。-v オプションを指定した場合、たとえば、指定子がアクティブになっていない理由などの、より詳細な情報が表示されます。次に、::events dcmd の出力例を示します。

> :
:
events
   ID S TA HT LM Description                              Action
----- - -- -- -- ---------------------------------------- -------------
[ 1 ] - T   1  0 stop on SIGINT                           -      
[ 2 ] - T   0  0 stop on SIGQUIT                          -
[ 3 ] - T   0  0 stop on SIGILL                           -
 ...
[ 11] - T   0  0 stop on SIGXCPU                          -
[ 12] - T   0  0 stop on SIGXFSZ                          -
[ 13] -     2  0 stop at libc`printf                      :
:
echo printf
>

次に、各カラムの意味を説明します。::help events を使用しても、この情報の要約を表示できます。

ID

イベント指定子の識別子。この識別子は、指定子が有効である場合は角括弧「[]」で囲まれ、指定子が無効である場合は丸括弧「()」で囲まれ、指定された指定子に一致するイベントが発生したあとにターゲットプログラムが現在停止している場合は山括弧「< >」で囲まれます。

S

イベント指定子の状態。この状態は次のシンボルのうちの 1 つです。

イベント指定子はアイドル状態です。どのターゲットプログラムも動作していないとき、すべての指定子はアイドル状態になります。ターゲットプログラムが動作しているとき、評価できない指定子はアイドル状態になることがあります。(たとえば、共用オブジェクトがまだ読み込まれておらず、共用オブジェクト内のブレークポイントが延期されている場合)。 

イベント指定子はアクティブです。ターゲットが継続されると、この種類のイベントがデバッガによって検出されます。 

イベント指定子は作動準備されてます。この状態は、ターゲットが現在動作しており、この種類のイベントが監視されていることを意味します。この状態を表示できるのは、-o nostop オプションを使用してデバッガを動作中のプログラムに接続している場合だけです。

オペレーティングシステムのエラーのために、イベント指定子は作動準備されていません。::events -v オプションを使用すると、監視が失敗した理由についてより詳細な情報が表示されます。

TA

Temporary、Sticky、および Automatic というイベント指定子のプロパティー。次のシンボルのうちの 1 つまたは複数が表示されます。

このイベント指定子は一時的であり、次回ターゲットが停止すると、一致するかどうかに関わらず削除されます。 

このイベント指定子はスティッキーであり、::delete all または :z では削除されません。このイベント指定子を削除するには、その ID を明示的に ::delete に指定します。

このイベント識別子は、ヒット回数がヒット制限に到達すると自動的に無効になります。 

このイベント識別子は、ヒット回数がヒット制限に到達すると自動的に削除されます。 

このターゲットは、ヒット回数がヒット制限に到達すると自動的に停止します。 

HT

現在のヒット回数。このカラムには、当該イベント指定子が作成されたあとに、対応するソフトウェアイベントがターゲット内で発生した回数が表示されます。

LM

現在のヒット制限。このカラムには、自動無効、自動削除または自動停止が発生するときのヒット回数の制限が表示されます。このような動作を設定するには、::evset dcmd を使用します。

Description

指定された指定子に一致するソフトウェアイベントの種類の説明。

Action

対応するソフトウェアイベントが発生したときに実行されるコールバック文字列。このコールバックは、コマンドプロンプトに入力された場合と同じように実行されます。

id ::evset [+/-dDestT] [-c cmd] [-n count] id ...

1 つまたは複数のソフトウェアイベント指定子のプロパティーを変更します。プロパティーは、dcmd の前にあるオプションの式と dcmd の後ろにあるオプションの引数リストによって識別される指定子ごとに設定されます。基数が明示的に指定されない限り、引数リストは 10 進数の整数のリストとして解釈されます。::evset dcmd は次のオプションを認識します。

-d

ヒット回数がヒット制限に到達すると、イベント識別子を無効にします。+d 形式のオプションを指定した場合、この動作は無効になります。イベント指定子が無効になると、もう一度有効になるまで、デバッガは対応する監視をすべて削除し、対応するソフトウェアイベントを無視します。-n オプションを指定しない場合、指定子はすぐに無効になります。

-D

ヒット回数がヒット制限に到達すると、イベント識別子を削除します。+D 形式のオプションを指定した場合、この動作は無効になります。-D オプションは -d オプションよりも優先されます。ヒット制限を設定するには、-n オプションを使用します。

-e

イベント指定子を有効にします。+e 形式のオプションを指定した場合、この動作は無効になります。

-s

ヒット回数がヒット制限に到達すると、ターゲットプログラムを停止します。+s 形式のオプションを指定した場合、この動作は無効になります。-s オプションを指定すると、デバッガは指定子のコールバックが実行されるたびに (ただし、N 回目の実行を除く(N は指定子のヒット制限の現在の値))、::cont が発行されたかのように動作します。-s オプションは -D オプションと -d オプションよりも優先されます。

-t

イベント指定子を「一時的」であるとマークします。一時的な指定子は、次回ターゲットが停止すると、指定した指定子に対応するソフトウェアイベントの結果によって停止したかどうかに関わらず、自動的に削除されます。+t 形式のオプションを指定した場合、「一時的」マーカーは削除されます。-t オプションは -T オプションよりも優先されます。

-T

イベント指定子を「スティッキー」であるとマークします。スティッキーな指定子は、::delete all または :z では削除されません。スティッキーな指定子を削除するには、対応する ID を明示的な引数として ::delete に指定します。+T 形式のオプションを指定した場合、「スティッキー」プロパティー は削除されます。イベント指定子のデフォルトセットには初めから「スティッキー」のマークが付いています。

-c

対応するソフトウェアイベントがターゲットプログラム内で発生するたびに、指定された cmd 文字列を実行します。現在のコールバック文字列を表示するには、::events を使用します。

-n

ヒット制限の現在の値を count に設定します。ヒット制限を現在設定せずに、-n オプションと一緒に -s または -D オプションを指定していない場合、ヒット制限は 1 に設定されます。

::help evset を使用しても、この情報の要約を表示できます。

flt ::fltbp [+/-dDestT] [-c cmd] [-n count] flt ...

指定されたマシン障害を追跡します。障害を特定するには、dcmd の前にオプションの障害番号を指定するか、dcmd の後ろに障害の名前または番号のリストを指定します (<sys/fault.h> を参照)。-d-D-e-s-t-T-c、および -n オプションは、::evset dcmd で使用するのと同じです。::fltbp コマンドは、ユーザープロセスのデバッグにのみ適用されます。

signal :i

ターゲットが動作中のユーザープロセスである場合、指定されたシグナルを無視して、透過的にターゲットにそのシグナルを送ります。指定されたシグナルの送り先を追跡しているイベント指定子はすべて、追跡対象イベントのリストから削除されます。デフォルトでは、無視されるシグナルは、デフォルトでプロセスがコアをダンプする原因となるシグナルセット (signal(3HEAD) を参照) の補集合に初期化されます (ただし、デフォルトで追跡される SIGINT を除く)。:i コマンドは、ユーザープロセスのデバッグにのみ適用されます。

$i

デバッガが無視して、ターゲットが直接処理するシグナルのリストを表示します。追跡対象シグナルについてのより詳細な情報を取得するには、::events dcmd を使用します。$i コマンドは、ユーザープロセスのデバッグにのみ適用されます。

::kill
:k

ターゲットが動作中のユーザープロセスである場合、強制的にターゲットを終了します。また、ターゲットが本来デバッガで ::run を使用して作成されていた場合、デバッガを終了すると、ターゲットは強制的に終了されます。::kill コマンドは、ユーザープロセスのデバッグにのみ適用されます。

$l

ターゲットがユーザープロセスである場合、代表スレッドの LWPID を出力します。

$L

ターゲットがユーザープロセスである場合、ターゲット内にある各 LWP の LWPID を出力します。

::next [SIG]
:e [SIG]

ターゲットプログラムを 1 命令だけ実行しますが、サブルーチンの呼び出しまでは進めます。オプションのシグナルの名前または番号 (signal (3HEAD) のマニュアルページを参照) が引数として指定された場合、このシグナルはターゲットの実行を再開するための一部として、すぐにターゲットに送られます。どのターゲットプログラムも動作していない場合、::next は、::run を実行したかのように新しいプログラムを起動し、最初の命令で停止します。

::run [args ... ]
:r [args ... ]

指定された引数を使用して、新しいターゲットプログラムの実行を起動し、接続します。引数はシェルによって解釈されません。デバッガがすでに動作中のプログラムを検査している場合、::release が実行された場合と同じように、最初にこのプログラムから切断します。

[signal] ::sigbp [+/-dDestT] [-c cmd] [-n count] SIG ...
[signal] :t [+/-dDestT] [-c cmd] [-n count] SIG ...

指定されたシグナルの送り先を追跡します。シグナルを特定するには、dcmd の前にオプションのシグナル番号を指定するか、dcmd の後ろにシグナルの名前または番号のリストを指定します (signal(3HEAD) を参照)。-d-D-e-s-t-T-c、および -n オプションは、::evset dcmd で使用するのと同じです。最初に、デフォルトでプロセスがコアをダンプする原因となるシグナルセット (signal(3HEAD) を参照) と SIGINT が追跡されます。::sigbp コマンドは、ユーザープロセスのデバッグにのみ適用されます。

::step [branch | over | out] [SIG]
:s SIG
:u SIG

ターゲットプログラムを 1 命令だけ実行します。オプションのシグナルの名前または番号 (signal (3HEAD) のマニュアルページを参照) を引数として指定し、ターゲットがユーザープロセスである場合、このシグナルはターゲットの実行を再開するための一部として、すぐにターゲットに送られます。オプションの branch 引数を指定した場合、プロセッサの制御フローを分岐する次の命令が出されるまで、ターゲットプログラムは実行を継続します。::step branch 機能は、該当するプロセッサ固有の機能が有効になっている x86 システム上で kmdb を使用している場合にのみ利用できます。over 引数を指定した場合、::step はサブルーチンの呼び出しまで進めます。::step over 引数は ::next dcmd と同じです。オプションの out 引数を指定した場合、代表スレッドが現在の関数から戻ってくるまで、ターゲットプログラムは実行を継続します。どのターゲットプログラムも動作していない場合、::step over は、::run を実行したかのように新しいプログラムを起動し、最初の命令で停止します。:s dcmd は ::step と同じです。:u dcmd は ::step out と同じです。

[syscall] ::sysbp [+/-dDestT] [-io] [-c cmd] [-n count] syscall ...

エントリを追跡するか、指定されたシステムコールから終了します。システムコールを特定するには、dcmd の前にオプションのシステムコール番号を指定するか、dcmd の後ろにシステムコールの名前または番号のリストを指定します (<sys/syscall.h> を参照)。-i オプションを指定した場合 (デフォルト)、イベント指定子はシステムコールごとにカーネルに入るトリガーとなります。-o オプションを指定した場合、イベント指定子はカーネルから終了するトリガーとなります。-d-D-e-s-t-T-c、および -n オプションは、::evset dcmd で使用するのと同じです。::sysbp コマンドは、ユーザープロセスのデバッグにのみ適用されます。

addr [,len]::wp [+/-dDestT] [-rwx] [-ip] [-c cmd] [-n count]
addr [,len]:a [cmd... ]
addr [,len]:p [cmd... ]
addr [,len]:w [cmd... ]

指定された場所にウォッチポイントを設定します。監視される領域の長さをバイト数で設定するには、 dcmd の前に繰り返し回数を指定します。長さを明示的に設定しない場合、デフォルトは 1 バイトです。::wp dcmd を使用すると、読み取り (-r オプション)、書き込み (-w オプション)、または実行 (-x オプション) のアクセス権の任意の組み合わせでのトリガーが可能となるようにウォッチポイントを構成できます。-d-D-e-s-t-T-c、および -n オプションは、::evset dcmd で使用するのと同じです。x86 システムで kmdb を使用している場合のみ、-i オプションを使って、ウォッチポイントが入出力ポートのアドレス上に設定されなくてはならないことを指定できます。kmdb のみを使用している場合は、-p オプションを使って、指定されたアドレスが物理アドレスとみなされるべきであることを指定できます。:a dcmd は、指定されたアドレスに読み取り権のウォッチポイントを設定します。:p dcmd は、指定されたアドレスに実行権のウォッチポイントを設定します。:w dcmd は、指定されたアドレスに書き込み権のウォッチポイントを設定します。:a:p、および :w dcmd の後ろにある引数は連結され、コールバック文字列となります。この文字列にメタキャラクタが含まれる場合、文字列を引用符で囲む必要があります。

:z

すべてのイベント指定子を追跡対象ソフトウェアイベントのリストから削除します。::delete を使用しても、イベント指定子は削除できます。