1.はじめに
IDE(統合開発環境) がIntegrated なのはエディタ上で「デバッグ」ができるから。
IDEでデバッグができることで、生産性が上がる。
デバッグすることが勉強になる。
1.1.この文章の対象
- 対象環境: Eclipse。バージョンは気にしない。
- 対象者: Eclipseとデバッグの初心者。
- 対象言語: Java。バージョンは気にしない。
1.2.デバッグ、デバッガって何
バグの原因を調査し、修正するのが「デバッグ」。
プログラムにバグがあったときにの原因調査のために利用するツールが「デバッガ(debugger)」。
デバッガは、
- 「ブレークポイント」でプログラムを一時停止し
- その時点の変数などの値を見たり、1行ずつなど動かして、プログラムの動作を見て
- どこで想定と違う動きとなるか、といった調査を行う
というように利用する。
1.3.なぜ、デバッガがいるの?
バグがあるから。
全部想定どおり動けば要らない。
プログラムを動かすと、想定と異なるデータ、考慮不足の設計、
コーディングミスなど様々な原因でバグが発生する。
(想定どおり動いているよね、という確認に利用することもあります。)
2. 使い方
2.1.「ブレークポイント」 と その設定
「ブレークポイント」とは、一時停止させるプログラムの行のこと。
プログラムの「エディター」ウィンドウの一番左側をダブルクリックすると、ブレークポイントとして設定され、○が表示される。
- 停止できる行にしか設定できない。(空白行、クラスやメソッドの定義の行などには停止しない。)
- 複数の行をブレークポイントに設定できる。
- その行に来た時点で一時停止する。
- ブレークポイントに条件を設定し、設定条件の場合にのみ一時停止することも可能。
「ここら辺が怪しい、この変数の値を見たい、ここら辺の動作をみたい」というところに設定する。
ブレークポイントを解除したい場合、○をダブルクリックする。
2.2.「実行(Run)」/「デバッグ」
IDEでのプログラムの実行方法は次の2つがある。
- 「実行」: ブレークポイントで一時停止しない。
- 「デバッグ」: ブレークポイントで一時停止する。
デバッグでブレークポイントに到達すると、そこで一時停止し、Eclipseの「デバッグパースペクティブ」上のエディタが開き、停止している行が矢印で示される。
尚、main関数で引数を設定する場合は、右クリック→「構成(run configuration, debug configuration)」の「引数(Argument)」で設定できる。
2.3.デバッグ 停止中にできること
2.3.1.値の確認
下記で、値を確認できる。
メソッド戻り値や、クラスのフィールドも見れる。
2.3.2.インスペクション(Inspect): 一回だけ見たい場合
フィールドを選択した状態で、右クリック -> インスペクション
2.3.3.監視(Watch): 継続的に見たい場合
フィールドを選択した状態で、右クリック -> 監視
変数であれば、「変数(Variable)」タブで変数の値を確認できる。
2.4.一時停止から動かす
デバッグの一時停止中に「処理が次の行に進むとどうなるのかな?」といった場合に以下のように動作させる。
(よく使うもののみ記載。)
ステップオーバーなど、ショートカットを使うと手間が減る。
日本語コマンド | English | 挙動 | ショートカット |
---|---|---|---|
再開 | Resume | プログラムの終了まで実行する。※ | F8 |
終了 | Terminate | 処理を中断(アプリケーションを終了)する。 | Ctrl+2 |
ステップイン | Step Into | 一時停止している次の行に進んで一時停止する。対象行でメソッドを呼び出す場合、呼び出し先のメソッドに入って先頭で一時停止する。 | F5 |
ステップオーバー | Step Over | 一時停止している次の行に進んで一時停止する。対象行でメソッドを呼び出している場合などは、それらの処理を行って次の行に進む。※ | F6 |
ステップリターン | Step Return | 実行中のメソッドのreturnまで行い、呼び出し元のメソッドに戻った時点で一時停止する。※ | F7 |
※ それまでにブレークポイントに進んだ場合は、そこで一時停止する。
ショートカットについては、ボタンの押し間違いに注意!
「やっと再現した!」 → トレースしているときに、F7とF8を押し間違える → ( ゚Д゚) ( ゚Д゚) ( ゚Д゚)