機械命令レベルの各コマンドは、対応するソースレベルのコマンドと同じように動作します。ただし、動作の単位はソース行ではなく、単一の命令です。
ある機械命令から次の機械命令へのシングルステップを実行するには、nexti コマンドまたは stepi コマンドを使用します。
nexti コマンドと stepi コマンドは、それぞれに対応するソースコードレベルのコマンドと同じ動作を行います。nexti コマンドは関数をステップオーバーし、stepi コマンドは、次の命令から呼び出された関数にステップインして、呼び出された関数内の最初の命令で停止します。コマンドの書式も同じです。
nexti コマンドと stepi コマンドからの出力は、対応するソースレベルのコマンドとは次の 2 つの点で異なります。
この出力には、ソースコードの行番号の代わりに、プログラムが停止した命令のアドレスが含まれます。
デフォルトの出力には、ソースコード行の代わりに、逆アセンブルされた命令が含まれます。
例:
(dbx) func hand::ungrasp (dbx) nexti ungrasp +0x18: call support (dbx)
詳細については、nexti コマンドと stepi コマンドを参照してください。
機械命令レベルでのトレースは、ソースコードレベルでのトレースと同じように行われます。ただし、tracei コマンドを使用する場合は例外です。tracei コマンドでは、実行中のアドレスま たはトレース対象の変数の値がチェックされた場合にだけ、単一の命令が実行されます。tracei コマンドは、stepi のような動作を自動的に行います。すなわち、プログラムは 1 度に 1 つの命令だけ進み、関数呼び出しに入ります。
tracei コマンドを使用すると、dbx がアドレスの実行またはトレースされている変数または式の値をチェックしている間、プログラムが各命令のあとに一瞬停止するようになります。このように tracei コマンドの場合、実行速度がかなり低下します。
trace とそのイベント指定および修飾子の詳細については、トレースの実行および tracei コマンドを参照してください。
tracei コマンドの一般的な構文は次のとおりです。
tracei event-specification [modifier]
一般的に使用される tracei コマンドの書式は次のとおりです。
|
詳細については、tracei コマンドを参照してください。
SPARC の場合:
(dbx) tracei next -in main (dbx) cont 0x00010814: main+0x0004: clr %l0 0x00010818: main+0x0008: st %l0, [%fp - 0x8] 0x0001081c: main+0x000c: call foo 0x00010820: main+0x0010: nop 0x00010824: main+0x0014: clr %l0 .... .... (dbx) (dbx) tracei step -in foo -if glob == 0 (dbx) cont 0x000107dc: foo+0x0004: mov 0x2, %l1 0x000107e0: foo+0x0008: sethi %hi(0x20800), %l0 0x000107e4: foo+0x000c: or %l0, 0x1f4, %l0 ! glob 0x000107e8: foo+0x0010: st %l1, [%l0] 0x000107ec: foo+0x0014: ba foo+0x1c .... ....