JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.3: dbx コマンドによるデバッグ     Oracle Solaris Studio 12.3 Information Library (日本語)
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.  機械命令レベルでのデバッグ

19.  dbx の Korn シェル機能

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

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

B.  イベント管理

イベントハンドラ

イベントの安全性

イベントハンドラの作成

イベントハンドラを操作するコマンド

イベントカウンタ

イベント指定の設定

ブレークポイントイベント仕様

in function

at [filename: ]line_number

at address_expression

infile filename

infunction function

inmember function inmethod function

inclass classname [-recurse | -norecurse]

inobject object-expression [-recurse | -norecurse]

データ変更イベント指定

access mode address-expression [, byte-size-expression ]

change variable

cond condition-expression

システムイベント指定

dlopen [ lib-path ] dlclose [ lib-path ]

fault fault

lwp_exit

sig signal

sig signal sub-code

sysin code | name

sysout code | name

sysin | sysout

実行進行状況イベント仕様

exit exitcode

next

returns

returns function

step

その他のイベント仕様

attach

detach

lastrites

proc_gone

prog_new

stop

sync

syncrtld

thr_create [thread_id]

thr_exit

throw

throw type

throw -unhandled

throw -unexpected

timer seconds

イベント指定のための修飾子

-if condition

-resumeone

-in function

-disable

-count n -count infinity

-temp

-instr

-thread thread_id

-lwp lwp_id

-hidden

-perm

解析とあいまいさに関する注意

事前定義済み変数

when コマンドに対して有効な変数

$handlerid

when コマンドと特定のイベントに対して有効な変数

イベントハンドラの例

配列メンバーへのストアに対するブレークポイントを設定する

単純なトレースを実行する

関数の中だけハンドラを有効にする (in function)

実行された行の数を調べる

実行された命令の数をソース行で調べる

イベント発生後にブレークポイントを有効にする

replay 時にアプリケーションファイルをリセットする

プログラムの状態を調べる

浮動小数点例外を捕捉する

C.  マクロ

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

索引

イベントハンドラの例

次に、イベントハンドラの設定例をあげます。

配列メンバーへのストアに対するブレークポイントを設定する

array[99] でデータ変更ブレークポイントを設定するには、次のように入力します。

(dbx) stop access w &array[99]
(2) stop access w &array[99], 4
(dbx) run
Running: watch.x2
watchpoint array[99] (0x2ca88[4]) at line 22 in file "watch.c"    
   22    array[i] = i;

単純なトレースを実行する

単純なトレースの例:

(dbx) when step { echo at line $lineno; }

関数の中だけハンドラを有効にする (in function)

たとえば、

<dbx> trace step -in foo

は、次のようなスクリプトと等価です。

    # create handler in disabled state
    when step -disable { echo Stepped to $line; }
    t=$newhandlerid    # remember handler id
    when in foo {
    # when entered foo enable the trace
    handler -enable "$t"
    # arrange so that upon returning from foo,
    # the trace is disabled.
    when returns { handler -disable "$t"; };
    }

実行された行の数を調べる

小規模なプログラムで何行実行されたかを調べます。

(dbx) stop step -count infinity     # step and stop when count=inf
(2) stop step -count 0/infinity
(dbx) run
...
(dbx) status
(2) stop step -count 133/infinity

ここでは、プログラムを停止させているのではなく、明らかにプログラムが終了しています。実行された行の数は 133 です。このプロセスは非常に低速です。この方法が有効なのは、何度も呼び出される関数にブレークポイントを設定している場合です。

実行された命令の数をソース行で調べる

特定の行で実行された命令の数を数えます。

(dbx) ...                        # get to the line in question
(dbx) stop step -instr -count infinity
(dbx) step ...
(dbx) status
(3) stop step -count 48/infinity # 48 instructions were executed

ステップ実行している行で関数呼び出しが行われる場合、最終的にそれらの呼び出しもカウントされます。step イベントの代わりに next イベントを使用すれば、そのような呼び出しはカウントされません。

イベント発生後にブレークポイントを有効にする

別のイベントが発生した場合のみ、ブレークポイントを有効にします。たとえば、プログラムで関数 hash が 1300 番目のシンボル検索以後に正しく動作しなくなるとします。次のように入力します。

(dbx) when in lookup -count 1300 {
    stop in hash
    hash_bpt=$newhandlerid
    when proc_gone -temp { delete $hash_bpt; }
}

注 - $newhandlerid が、実行された直後の stop in コマンドを参照している点に注意してください。


replay 時にアプリケーションファイルをリセットする

アプリケーションが処理するファイルを replay 中にリセットする必要がある場合、プログラムを実行するたびに自動的にリセットを行うハンドラを書くことができます。

(dbx) when sync { sh regen ./database; }
(dbx) run < ./database... # during which database gets clobbered
(dbx) save
...              # implies a RUN, which implies the SYNC event which
(dbx) restore # causes regen to run

プログラムの状態を調べる

プログラムの実行中にその状態をすばやく調べます。

(dbx) ignore sigint
(dbx) when sig sigint { where; cancel; }

プログラムを停止しないでそのスタックトレースを調べるためには、ここで ^C を押します。

コレクタはこれ以外のことも実行できますが、基本的にコレクタの手動標本収集モードが実行する機能は、このように状態を調べます。ここではすでに ^C を使用したため、プログラムに割り込むには SIGQUIT (^\) を使用します。

浮動小数点例外を捕捉する

特定の浮動小数点例外を捕捉します。ここでは、IEEE オーバーフローだけを捕捉しています。

(dbx) ignore FPE               # turn off default handler
(dbx) help signals | grep FPE  # can’t remember the subcode name
...
(dbx) stop sig fpe FPE_FLTUND
...