>> EclipseによるWebアプリケーションのデバッグへ
他のIDEと同じく、Eclipseも強力なデバッグ機能を持っています。例えばある時点の変数の値を知りたい場合、System.out.printlnで変数の値を出力する必要は無く、デバッガでブレークポイントを設定して値を確認できます。デバッガを使いこなせるようになれば開発効率も上がるため、是非覚えておきたい機能です。
まずはデバッガの基本となる操作をいくつか見ていきます。尚、以下で使用しているEclipseのバージョンは3.1.2です。Eclpse2.xやEclipse3.0ではサポートされていない機能もあるかもしれませんのでご注意下さい。
ブレークポイントとは、プログラムの実行を中断する場所を示すものです。このマークをつけることによって、デバッグモードで実行したとき、その場所まで来ると自動的にプログラムが停止します。
ブレークポイントを設定するには、設定したい行の左端(右図の赤い○が付いている部分)をダブルクリックします。解除する場合も同じくダブルクリックして下さい。
これでプログラムをデバッグ実行すると、ブレークポイントを設定した箇所でプログラムの実行が中断し、その時点での変数の値の確認/変更やその後のステップ実行が行えるようになります。
デバッガを起動するには、実行したいクラスを右クリック>デバッグ>Javaアプリケーションを選択します(右図。WebAPのようなスタンドアロン実行できないもののデバッグ方法は後述)。
選択したクラスが実行され、最初のブレークポイントでプログラムが中断された状態になります(下図)。
青色の右矢印は、現在プログラムが停止している場所を示しています。尚、矢印で示される行はまだ実行されていません。
ブレークポイントでプログラムが中断した状態から、次のブレークポイントまで実行させたり、1行ずつ実行させたりできます。
デバッグ実行を行うと、"Java"パースペクティブから"デバッグ"パースペクティブへ切り替わっているはずです。そのパースペクティブでは左上に「デバッグ」ビューが表示され、右図のように各種アイコンが表示されます。このアイコンやショートカットキー(慣れればこちらの方が便利でしょう)を使ってデバッグを行っていくことになります。
ステップ実行において良く使われる操作の一覧を以下に示します。
| 操作名 | ショートカットキー |
|---|---|
| 再開 | F8 |
| ステップイン | F5 |
| ステップオーバー | F6 |
| ステップ・リターン | F7 |
ステップ実行とは関係ありませんが、前回起動したクラスを再度実行したりデバッグする場合は、以下のショートカットキーが便利です。
| 操作名 | ショートカットキー |
| 前回の起動を実行 | Ctrl + F11 |
| 前回の起動をデバッグ | F11 |
次のブレークポイントまでプログラムを実行します。図Aの状態から"再開"を実行すると、以下のように次のブレークポイントまでプログラムが実行されます。

次の1行を実行します。次の1行にメソッド呼び出しが含まれている場合は、そのメソッド内部に入った状態でプログラムが中断します。図Aの状態から"ステップイン"を実行すると、以下のようにcalcurateメソッドの先頭で停止します。
図B. ステップイン実行後
次の1行を実行します。次の1行にメソッド呼び出しが含まれている場合でも、そのメソッド呼び出しを終えた状態でプログラムが中断します。図Aの状態から"ステップオーバー"を実行すると、calcurateメソッドの呼び出しを実行し、次の行で停止します。

今実行中のメソッドの実行を終えて、呼び出し元へ戻ります。図Bの状態から"ステップリターン"を実行すると、calcurateメソッドの実行を終了して、再び図Aに戻ります。ただし、次にステップインやステップオーバーを実行しても、単に次の行に矢印が移るだけでcalcurateメソッド自体は実行されません。
デバッガを起動すると右上に変数ビューが表示され、現在参照可能な変数のリストが表示されます。下図は図Aにおける変数ビューのスナップショットです。変数がオブジェクトの場合は、そのフィールドの値を見ることができます。フィールドがオブジェクトの場合も同じように中身を見ることができます。

この状態からステップオーバーを実行して1行実行した後の状態が下図です。resultの値が変更されていることがわかります。

更に、デバッグ中にある変数の値を変更したい場合があります。その場合もこの変数ビューを使います。変更したい変数を右クリック>値の変更を選択します。

変更後の値を入力し(変数の型によってダイアログボックスの内容は異なります)、

OKボタンを押して変更を完了します。確かに値が変更されています。

異常系の処理のような、普段通らないルートを確認する場合にも、この方法が有効と思います。
変数の値の確認は、変数ビュー以外にエディター上でも可能です。確認したい変数を選択し(下図のように選択状態にする)、右クリック>インスペクションを選択します。するとエディタ上に変数の値が表示されます。

大抵の場合、変数の値確認ではこちらの方が便利なはずです。確認はインスペクション、値の変更は変数ビューからと使い分けると良いでしょう。
デバッグ中に任意の時点で任意のコードを実行させることができます。
エディタ上で実行させたいコードを範囲選択し、右クリック>実行を選択します。
上の図では変数resultに掛け算の結果を代入するコードを実行しています。実行後、変数ビューを見ると確かに掛け算が実行され、x:3
* y:4 = 12になっていることがわかります。

上の方法では既に記述されたコードしか実行できませんが、表示ビューに任意のコードを記述して実行させることも可能です。表示ビューが表示されていない場合は、メニューからウィンドウ>ビューの表示>表示を選択して下さい。
表示ビューには現在のコンテキストで参照可能な変数を使用できます。コンテンツ・アシストも有効です。下の例では変数resultに10と5の足し算結果を格納するコードを記述し、実行しようとしています。尚、行の最後のセミコロンはあっても無くても良いようですが、付けておいた方が無難です。このコードを実行後、resultの値が15に設定されます。

ブレークポイントには条件を付けることができます。条件を設定しなければブレークポイントを設定した行で毎回プログラムが中断しますが、ある条件を満たしたときだけ中断するようにすることが可能です。
エディタ上でブレークポイントを右クリック>ブレークポイント・プロパティを選択します。以下のダイアログが表示されます。画面左にフィルターと共通という項目がありますが、共通を選んでください。
ここで「条件を使用可能にする」にチェックを入れ、ブレークポイントでプログラムを中断させるための条件を記述して下さい。上の図の例は、xの値が3,
yの値が4の時にプログラムが中断する例です。
条件を設定すると、ブレークポイントに"?"のマークが付きます。

デバッグの実行中にソースコードを変更し、デバッガを再起動させることなく即座に反映させる仕組みです。JVM1.3以前では不可能ですが、JVM1.4以上であればサポートされています。
特に起動に時間がかかるAPのデバッグ等で便利な機能です。単にデバッガ起動中にソースコードを変更して保存するだけですので、特別な操作は必要ありません。ただ、現在実行中のメソッドを変更することはできないようですので、メソッドを呼び出す前に変更しておきましょう。
異常系の動作確認のために、任意の場所で意図的に例外を発生させたいケースもあると思います。これは、基礎編の任意のコードの実行を応用させることで可能です(他にもっといい方法があるかもしれませんが)。
例えば以下のcatchブロックの処理を実行させたい場合、

ステップ実行でカーソルをtryブロック内に移動させ、表示ビューに例外をスローするコードを記述します(セミコロンまで必要です)。そして範囲選択>右クリックで実行を選択します。

これにより例外がスローされ、catchブロックの処理が実行されて次のブレークポイントまでプログラムが実行されます。通常の処理を実行させた場合は、プログラム自体はブレークポイントで停止したままですが、例外をスローさせた場合はプログラムの実行が再開される形になります。
>> EclipseによるWebアプリケーションのデバッグへ
資料室へ戻る