概要
デバッグ(Debug)はご存知の通り,バグ(欠陥)の除去を行う作業である.
ほとんどのプログラム言語にいは,デバッグ作業を行うためのツールである
デバッガー(Debugger)が提供されている.
- C言語: dbx,
gdb
- Java: jdb
- C#: Visual Studioについているはず.
デバッカーの基本機能
ほとんどのデバッガーは,
プログラムの実行途中の変数値を観測する機能を提供しているに過ぎない.
プログラムの実行は通常は凄い速さで済んでしまうので,
以下のような実行制御の機能を持つ.
- ブレークポイントの設定: 特定の命令文や行で実行を一時停止する機能.
停止した時点での変数の値,存在するオブジェクト等が確認できる.
- ウオッチポイントの設定: 特定の変数が更新や変更された場合に一時停止する機能.
停止した時点での変数の値,存在するオブジェクト等が確認できる.
- ステップ実行: 命令を逐次的に実行する機能.
これによって,変数の値の変化等を追跡することができる.
- Step into メソッド呼び出し等の中にも入り込み一命令毎に実行.
- Step over メソッド呼び出し等は一塊として,一命令毎に実行.
- Step retrun 現在のメソッド呼び出しから返るとこまで実行して止まる.
- Resume: 次のブレークポイント,ウオッチポイント等まで実行を継続する機能.
Eclipseのデバッガー
数年前の演習1の解答例
(utf8版[ZIP])
を用いてEclipse上でのデバッガー
を紹介する.みていて,なかなか楽しい.
- Eclipseを起動して,デバッグしたいソースを適当に開く.
- ウォッチポイントを設定,
ウォッチしたい属性の左を左ダブルクリックすれば,
ポイントが設定される
[JPG].
トグルになっているので,再度,ダブルクリックすれば,ポイントは消える.
-
ウォッチポイントは,
通常は参照,更新両方を監視することになっているので,
例えば,更新だけ監視したい場合は,
プロパティを開けて
[JPG],
Accessのチェックを外したりする
[JPG],
-
メソッド内の命令文が普通の意味でのブレークポイントとなる
[JPG].
- デバックを開始する
[JPG],
Debug perspective を開けるか?と聞いてるので
[JPG],
Yes で開ける.
- デバッグの画面になる
[JPG].
右上に現在実行がされているメソッドが含まれるオブジェクトの情報が表示されている.
左上あたりのボタン群
[JPG]
が,resume, step 等を行うためのボタン.
- ためしにresumeすると,
balance が更新される手前まで進む.
- さらに step over を押すと,実際に更新される瞬間?を観測できる
[JPG].
- また resume とかすると,Station.getFareFrom()
辺りで止まるが,実際に駅インスタンス内にある
HashMapの値なんか確認できたりして
[JPG],
結構面白い.
- こんな感じで一歩一歩プログラムを実行したり,止めたりして,
期待通りに値の更新がされているかや,
期待通りにメソッドが呼び出されているかを確認する.
-
期待通りになっていない箇所こそ,まさにバグである!
-
通常のJava開発画面に戻るには,
Window → Open Perspective → Java である
[JPG].