ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
![]() |
Oracle Solaris Studio 12.3: dbx コマンドによるデバッグ Oracle Solaris Studio 12.3 Information Library (日本語) |
アドレスと examine または x コマンドを使用して、メモリーロケーションの内容を調べたり、各アドレスでアセンブリ言語命令を出力したりすることができます。アセンブリ言語のデバッガである adb(1) から派生したコマンドを使用して、次の項目について問い合わせることができます。
address - = (等号) を使用。
あるアドレスに格納されている contents - / (スラッシュ) を使用。
dis、listi コマンドを使用して、アセンブリ命令とメモリーの内容を調べることができます (「dis コマンドの使用」と 「listi コマンドの使用」を参照)。
examine コマンドまたはその別名 x を使用すると、メモリーの内容やアドレスを表示することができます。
あるメモリーの内容を表示するには、書式 format の count 項目の address で表される次の構文を使用します。デフォルトの address は、前に表示された最後のアドレスの次のアドレスになります。デフォルトの count は 1 です。デフォルトの format は、前の examine または X コマンドで使用されたものと同じです (これが最初に入力されたコマンドの場合)。
examine コマンドの構文は次のとおりです。
examine [address] [/ [count] [format]]
address1 から address2 までのメモリー内容を書式 format で表示するには、次のように入力します。
examine address1, address2 [/ [format]]
アドレスの内容ではなくアドレスを指定の書式で表示するには、次のように入力します。
examine address = [format]
examine によって最後に表示されたアドレスの次のアドレスに格納された値を出力するには、次のように入力します。
examine +/ i
式の値を出力するには、式をアドレスとして入力します。
examine address=format examine address=
address はアドレスの絶対値、またはアドレスとして使用できる任意の式です。+ (プラス記号) はデフォルトの address の次のアドレスを表します。
たとえば、次のアドレスは有効です。
|
メモリーを表示するためのアドレス表現は、名前の前にアンパサンド & を付けて指定します。関数名はアンパサンドなしで使用できます。&main は main と同じです。レジスタは、名前の前にドル記号 $ を付けることによって表します。
format は、dbx がアドレスの問い合わせ結果を表示するときの書式です。生成される出力は、現在の表示書式 format によって異なります。表示書式を変更する場合は、異なる format コードを使用してください。
各 dbx セッションの初めに設定されるデフォルトの書式は X です。このとき、16 進表記のアドレスと値が 1 ワード (32 ビット) で表示されます。次の表は、表示書式の一覧です。
|
count は、10 進法での反復カウントを示します。増分サイズは、メモリーの表示書式によって異なります。
次の例は、count および format の各オプションを付けてアドレスを使用して、現在の停止点から始まる 5 つの連続する分解された命令を表示する方法を示しています。
SPARC システムの場合:
(dbx) stepi stopped in main at 0x108bc 0x000108bc: main+0x000c: st %l0, [%fp - 0x14] (dbx) x 0x108bc/5i 0x000108bc: main+0x000c: st %l0, [%fp - 0x14] 0x000108c0: main+0x0010: mov 0x1,%l0 0x000108c4: main+0x0014: or %l0,%g0, %o0 0x000108c8: main+0x0018: call 0x00020b90 [unresolved PLT 8: malloc] 0x000108cc: main+0x001c: nop
x86 システムの場合:
(dbx) x &main/5i 0x08048988: main : pushl %ebp 0x08048989: main+0x0001: movl %esp,%ebp 0x0804898b: main+0x0003: subl $0x28,%esp 0x0804898e: main+0x0006: movl 0x8048ac0,%eax 0x08048993: main+0x000b: movl %eax,-8(%ebp)
dis コマンドは、examine コマンド (デフォルト表示書式を i として指定) と同じです。
dis コマンドの構文は次のようになります。
dis [address] [address1, address2] [/count]
dis コマンドの動作は次のとおりです。
引数なしで実行すると、+ で始まる 10 の命令を表示します。
引数 address だけを指定して実行すると、address で始まる 10 の命令を逆アセンブルします。
引数 address と count を指定して実行すると、address で始まる count 命令を逆アセンブルします。
引数 address1 と address2 を指定して実行すると、address1 から address2 までの命令を逆アセンブルします。
count だけを指定して実行すると、+ で始まる count 命令を表示します。
対応するアセンブリ命令とともにソース行を表示するには listi コマンドを使用します。これは list -i と同じです。「ソースリストの出力」の list -i についての説明を参照してください。
SPARC システムの場合:
(dbx) listi 13, 14 13 i = atoi(argv[1]); 0x0001083c: main+0x0014: ld [%fp + 0x48], %l0 0x00010840: main+0x0018: add %l0, 0x4, %l0 0x00010844: main+0x001c: ld [%l0], %l0 0x00010848: main+0x0020: or %l0, %g0, %o0 0x0001084c: main+0x0024: call 0x000209e8 [unresolved PLT 7: atoi] 0x00010850: main+0x0028: nop 0x00010854: main+0x002c: or %o0, %g0, %l0 0x00010858: main+0x0030: st %l0, [%fp - 0x8] 14 j = foo(i); 0x0001085c: main+0x0034: ld [%fp - 0x8], %l0 0x00010860: main+0x0038: or %l0, %g0, %o0 0x00010864: main+0x003c: call foo 0x00010868: main+0x0040: nop 0x0001086c: main+0x0044: or %o0, %g0, %l0 0x00010870: main+0x0048: st %l0, [%fp - 0xc]
x86 システムの場合:
(dbx) listi 13, 14 13 i = atoi(argv[1]); 0x080488fd: main+0x000d: movl 12(%ebp),%eax 0x08048900: main+0x0010: movl 4(%eax),%eax 0x08048903: main+0x0013: pushl %eax 0x08048904: main+0x0014: call atoi <0x8048798> 0x08048909: main+0x0019: addl $4,%esp 0x0804890c: main+0x001c: movl %eax,-8(%ebp) 14 j = foo(i); 0x0804890f: main+0x001f: movl -8(%ebp),%eax 0x08048912: main+0x0022: pushl %eax 0x08048913: main+0x0023: call foo <0x80488c0> 0x08048918: main+0x0028: addl $4,%esp 0x0804891b: main+0x002b: movl %eax,-12(%ebp)