ソフトウェア開発支援ツール:デバッガ
DDDの使い方

DDD(Data Display Debugger)は、超多機能デバッガであり、 すべての機能を使いこなすのは難しい。 しかし、基本的な使い方だけでも、知っていれば充分に役立つ。

!!注意!!

dddは、日本語を含むソースファイルを正しく表示できない。 文字化けするだけでなく、 ソース表示ウィンドウ中の位置の計算を間違えるために、 ブレークポイントの描画位置、マウスクリックされたときの ポインタの位置などを間違えるようである。 トレースや実行は一応できるのだが、 事実上使いものにならなくなる。

準備

オブジェクトファイルや実行ファイルを 作成する時に、-gオプションをつけて、 ソースファイルに関する情報(シンボル情報)を埋め込む。 これを忘れると、ソースウィンドウに正しく表示されない。
gcc -g -o exefile sample.c

デバッガを起動する

実行ファイル名を引数として起動する。

ddd ./exefile
dddだけで起動し、 メニューの [File]--[Open Program ...]から実行ファイルを選択しても良い。

起動するとこんな画面が表示される。

使いやすくするための設定

初期状態では、少し使いにくいところがあるので、以下のような設定をしておくと よいと思う。 メニューの [Edit]--[Preferences ...]を選択し、以下のように設定する。

ソースウィンドウの表示位置の切替え

起動時には、ソースウィンドウには main 関数を含むソースファイルが表示されているはずである。

表示されている場所は、 次に述べるプログラムの実行制御に応じて、変化するが、 次のようにlookupボタンを使用することで手動で表示箇所を変更することもできる。

なお、関数名や変数名がソースウィンドウ中に表示されている時には、 マウスでクリックし、右ボタンで表示されるメニューから、 「lookup」を選択しても同様のことが実現できる。

プログラムの実行制御

ブレークポイントの設定

ブレークポイントとは、そこに来たら実行を一時停止する場所のことである。

ソース画面で、一時停止したい行の左側のの空白部分を左クリックすると、 lookupフィールドにファイル名と行番号が表示されるので、 ツールバーの「Break」ボタンを押すとブレークポイントが設定される。 ブレークポイントが設定されたことは、赤い「STOP」マークがつくのでわかる。

行の左側の空白部分を右クリックし、 メニューから「set breakpont」を選んでもよい。

ブレークポイントの設定ができない場合には、 -g オプション付きでコンパイルされていないことがほとんどである。

実行の開始

プログラムの実行を開始するには、コマンドツールのRunを押す。

プログラムを引数をつけて実行したい場合には、 メニュー [Program]--[Run]を選ぶ。 ダイアログが開くので、[Run with Arguments]のところに、 プログラムに渡す引数を設定する。 一度入力した引数は記憶してくれるので、 2回目以降は、ダイアログ中のArgumentsから選択すればよい。 最後に Run ボタンを押すと実行が行なわれる。

実行状況はdddの一番下のコンソール部に表示されるが、 デバッガ自身の出力メッセージと混在するので、わかりにくいかもしれない。 そのような場合には、 メニュー [Program]--[Run in Execution Window]にチェックを入れておく。 新しいウィンドウが開いて、その中でプログラムが実行される。

ステップ実行


ブレークポイントに到達すると、実行が一時停止する。 現在停止している場所は、緑の矢印で示されるが、 この行はまだ実行されていないことに注意せよ。

緑の矢印がさす行を実行して次の行にすすむには、 コマンドツールの「Step」や「Next」を押す。

変数の値の表示

ブレーク中には、変数の値を確認することができる。

単純な型の変数の値を見るには、マウスポインターを変数の上にのせて ちょっと待つ。マウスカーソルのところに変数の値がポップアップ されるはずである(ステータスラインのところにも表示される)。

変数名をクリックし、ツールバーの Displayを押すと、その変数の値が データディスプレイウィンドウに表示されるので、 ステップ実行しながら、値の変化を確認することができる。

データ構造の表示

Advance

実行中のプロセスのデバッグ

すでに実行中のプログラムに対して、あとからデバッガをアタッチすることもできる。
ddd --pid=プロセスID
プロセスIDとは、psコマンドで表示される番号である。 そのプログラムが-gオプションつきでコンパイルされていて、 ソースファイルがカレントにあるならば、ソースリストもきちんと表示される。

JAVAのデバッグ

!!!ちゃんと動作していない模様!!!

Cのデバッグの場合には、dddはgdbのGUIとなっているが、 JAVAのデバッグの場合には、dddはjdbのGUIとなる。

jdbの機能があまり高くないことと、 dddのjdbへの対応状況がいまいちであることから、 gdbのときのような快適さは期待できない。

javacでコンパイルする時に、-gをつける。 ddd を起動する時に、jdb を利用することを明示する-jオプション をつける。

javac -g sample.java
java sample
ddd -j sample