JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.2: dbx コマンドによるデバッグ
search filter icon
search icon

ドキュメントの情報

はじめに

1.  dbx の概要

2.  dbx の起動

3.  dbx のカスタマイズ

4.  コードの表示とコードへの移動

5.  プログラムの実行制御

6.  ブレークポイントとトレースの設定

7.  呼び出しスタックの使用

8.  データの評価と表示

9.  実行時検査

10.  修正継続機能 (fix と cont)

11.  マルチスレッドアプリケーションのデバッグ

12.  子プロセスのデバッグ

13.  OpenMP プログラムのデバッグ

14.  シグナルの処理

15.  dbx を使用してプログラムをデバッグする

16.  dbx を使用した Fortran のデバッグ

17.  dbx による Java アプリケーションのデバッグ

18.  機械命令レベルでのデバッグ

メモリーの内容を調べる

examine または x コマンドの使用

アドレスを使用する

書式を使用する

カウントを使用する

アドレスの使用例

dis コマンドの使用

listi コマンドの使用

機械命令レベルでのステップ実行とトレース

機械命令レベルでステップ実行する

機械命令レベルでトレースする

機械命令レベルでブレークポイントを設定する

あるアドレスにブレークポイントを設定する

regs コマンドの使用

プラットフォーム固有のレジスタ

SPARC レジスタ情報

x86 レジスタ情報

AMD64 レジスタ情報

19.  dbx の Korn シェル機能

20.  共有ライブラリのデバッグ

A.  プログラム状態の変更

B.  イベント管理

C.  コマンドリファレンス

索引

機械命令レベルでのステップ実行とトレース

機械命令レベルの各コマンドは、対応するソースレベルのコマンドと同じように動作します。ただし、動作の単位はソース行ではなく、単一の命令です。

機械命令レベルでステップ実行する

ある機械命令から次の機械命令に 1 つだけステップ実行するには、nexti コマンドまたは stepi コマンドを使用します。

nexti コマンドと stepi コマンドは、それぞれに対応するソースコードレベルのコマンドと同じように動作します。すなわち、nexti コマンドは over 関数をステップ実行し、stepi は次の命令が呼び出した関数をステップ実行します (呼び出された関数の最初の命令で停止します)。コマンドの書式も同じです。詳細については、next コマンド」step コマンド」を参照してください。

nextistepi の出力は、対応するソースレベルのコマンドの場合と次の 2 つの違いがあります。

次に例を示します。

(dbx) func
hand::ungrasp
(dbx) nexti
ungrasp +0x18:  call support
(dbx)

詳細については、nexti コマンド」stepi コマンド」を参照してください。

機械命令レベルでトレースする

機械命令レベルでのトレースは、ソースコードレベルでのトレースと同じように行われます。ただし、tracei コマンドを使用する場合は例外です。tracei コマンドでは、実行中のアドレスま たはトレース対象の変数の値がチェックされた場合にだけ、単一の命令が実行されます。tracei コマンドは、stepi のような動作を自動的に行います。すなわち、プログラムは 1 度に 1 つの命令だけ進み、関数呼び出しに入ります。

tracei コマンドを使用すると、各命令が実行され、アドレスの実行またはトレース中の変数または式の値を dbx が調べている間、プログラムは一瞬停止します。このように tracei コマンドの場合、実行速度がかなり低下します。

トレースとそのイベント仕様および修飾子については、「トレースの実行」tracei コマンド」を参照してください。

tracei コマンドの一般的な構文は次のとおりです。

tracei event-specification [modifier]

一般的に使用される tracei コマンドの書式は次のとおりです。

tracei step
各命令をトレース
tracei next
各命令をトレースするが、呼び出しを飛び越します。
tracei at address
指定のコードアドレスをトレース

詳細については、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
....
....