dbx

dbxの起動

dbx ./a.out

デバッグ対象のプログラム(ここでは./a.out)に引数が必要な場合は, dbx起動後にrunコマンドの後ろに指定するので, ここで指定してはいけない.

ブレイクポイント

コマンド 動作
stop in main シンボルmainにブレイクポイントを設定.
stop in foo 関数fooにジャンプした直後の位置にブレイクポイントを設定.
stop in C::method
stop in method
C++のメソッドにブレークポイントを設定したい場合,メソッド名がユニークであれば,クラス名の部分を省略できるようだ. メソッド名がユニークでない場合は, C::methodのようにスコープ解決演算子(::)を使って指定すればよい.
stop at 50 ソースコードの50行目にブレイクポイントを設定する.

データの表示

コマンド 動作
print a 変数aの内容を表示する.構造体などでも適当な形式で表示してくれる. C言語のキャスト演算子が使える. 例えば,変数achar型であるために,print aとすると, '^R'のように表示されてしまうような場合には, print (int)aのようにキャストしてやると18と整数値で表示されるようになる.
print 1 + 1 式を入力すると答えを表示してくれる. print a + 1のように式の中に変数を用いることもできる.
print foo(a) 手続きfoo(a)を実行する.
print $r28 汎用レジスタr28の内容を表示する. ただ,この用法ではregistersの方が便利かな.
dump 現在の関数内のローカル変数群の名前と内容を表示する.
registers レジスタの現在値を表示する.

移動

コマンド 動作
file foo.c 操作対象のソースファイルを変更する. パスが深くても,ファイル名が一意であれば,パスなしで発見してくれるようだ.
list 50, 70 現在操作対象になっているソースファイルの50行目から70行目までを表示する. 区切り記号がハイフン(-)ではなくてコンマ(,)であることに注意. とってもよく間違える.ハイフンでもよいことにしておいてくれてもよさそうなものなのに,実際にはハイフンはエラーになる. list 50とすると,50行目だけを表示する. 50行目の前後10行を表示するというような便利なコマンドはないようなので, 自分で暗算してlist 40, 60と打たなければならない.
/foo
?foo
fooを検索する.“/”だと下向き検索,“?”だと上向き検索になる. 検索パターンには正規表現が使える. “/”だけを入力すると前回指定したパターンが使われる. したがって,最初の1回だけパターンを書いて,あとは“/”だけでよい. パターンは“/”と“?”で共有しているので, “/”を何回か打ったのち,引き返したくなった場合はパターンを指定せず“?”だけで1個前にもどれる.
listi list instructions. アセンブリ言語リストを表示する.

実行

コマンド 動作
run 実行を開始する.
run -i foo.dat 実行するプログラムにコマンドライン引数を与える場合には, runの後ろに指定する. dbx ./foo -i foo.datは間違いなので注意.
cont continue. (ブレイクポイントで停止したあとで)実行を再開する.
step ステップ実行(高級言語ソースレベルの1ステップ).
next ステップオーバー. 次に実行するコードが手続き(関数)だった場合に, stepだと その手続きの中に入っていくけど, nextだと,関数の中には入らず(関数は1個のコードとして一気に実行されて)次の行に進む.
return 現在実行中の手続き(関数)を脱出したところで停止する.
stepi ステップ実行(機械語レベルの1ステップ).

メモリ内容の表示

コマンド例 動作
0x20000490, 0x20000500 /
0x20000490 /
0x20000490, 0x20000500 / s 文字列(string)として表示する.

資料

dbx
Sun Studio - Program Debugging
Sun Studio 11: Debugging a Program With dbx
DDD - Data Display Debugger
HP wdb/opt/langtools/bin/wdb
gdbのフロントエンドとして動作するGUIデバッガ. gdbのコマンドを覚えていない人でもgdbの高機能を享受できるので便利かも. 昔のHP-UXのddedbxのフロントエンドとして動作するGUIデバッガ)の後継にあたるものじゃないかと思う. HP-UXでは,ほかにもvdbというのがあるみたい. これはVim 5.7をベースにした半GUI(GUIなんだけどキャラクタベース・コマンド入力操作)のデバッガ. gdbの各コマンドに対応したボタンが画面下部に表示されているので,コマンドを正確に暗記している必要がなくなるという意味では少し便利かも. でも,結局のところCUIのgdbがいちばん便利のような気がするけども. コマンドを覚えなきゃいけないといっても,覚えるべきものはわずかしかないし, 画面表示にしてもデバッグ作業についてはGUIでないと何か不都合というわけでもないから,CUI・コマンド入力ベースで得られるスピードのほうが価値があるように思う.
dbx/gdbコマンド対応表

はたいたかし
2006-06-22 改訂
トップ > 開発ツール > デバッガ