1. 概要
このクイックガイドでは、EclipseIDEを使用してJavaプログラムをデバッグする方法を説明します。
2. 基本概念
Eclipseは、アプリケーションのデバッグを強力にサポートしています。 段階的な実行を視覚化し、バグを発見するのに役立ちます。
Eclipseのデバッグ機能を示すために、サンプルプログラムPerfectSquareCounterを使用します。 このプログラムは、指定された数の下で完全な正方形の合計、さらには完全な正方形をカウントします。
public class PerfectSquareCounter {
static int evenPerfectSquareNumbers = 0;
public static void main(String[] args) {
int i = 100;
System.out.println("Total Perfect Squares: " + calculateCount(i));
System.out.println("Even Perfect Squares : " + evenPerfectSquareNumbers);
}
public static int calculateCount(int i) {
int perfectSquaresCount = 0;
for (int number = 1; number <= i; number++) {
if (isPerfectSquare(number)) {
perfectSquaresCount++;
if (number % 2 == 0) {
evenPerfectSquareNumbers++;
}
}
}
return perfectSquaresCount;
}
private static boolean isPerfectSquare(int number) {
double sqrt = Math.sqrt(number);
return sqrt - Math.floor(sqrt) == 0;
}
}
2.1. デバッグモード
まず、 Eclipse内のJavaプログラムをデバッグモードで起動する必要があります。これは、次の2つの方法で実現できます。
- エディターを右クリックして、 Debug As-> Java Application を選択します(下のスクリーンショットに表示)
- デバッグツールバーからのプログラム(下のスクリーンショットで強調表示)
2.2. ブレークポイント
調査のために、プログラムの実行を一時停止するポイントを定義する必要があります。 これらはブレークポイントと呼ばれ、メソッドに適用できます。実行前または実行中にいつでも定義できます。
基本的に、プログラムにブレークポイントを追加する方法は3つあります。
- 線に対応するマーカーバー(垂直定規)を右クリックし、[ブレークポイントの切り替え]を選択します(下のスクリーンショットに表示)。
- エディターで必要な行のCtrl+ Shift +Bを押します
- 必要な行に対応するマーカーバー(垂直定規)をダブルクリックします
2.3. コードフロー制御
デバッガーが指定されたブレークポイントで停止したので、さらに実行を進めることができます。
デバッガーが現在、以下のスクリーンショットのように16行目に配置されていると仮定します。
最も一般的に使用されるデバッグオプションは次のとおりです。
- ステップイン(F5)–この操作は、現在の行で使用されているメソッドの内部に入ります(存在する場合)。 それ以外の場合は、次の行に進みます。 この例では、メソッド isPerfectSquare()内でデバッガーを使用します。
- ステップオーバー(F6)–この操作は現在の行を処理し、次の行に進みます。この例では、メソッド isPerfectSquare()を実行し、次の行に進みます。
- ステップリターン(F7)–この操作は現在のメソッドを終了し、呼び出し元のメソッドに戻ります。この場合、ループ内にブレークポイントがあるため、メソッド内にあります。それ以外の場合は、メインメソッドに戻ります
- 再開(F8)–この操作は、さらにブレークポイントに到達しない限り、プログラムが終了するまで実行を続行します。
2.4. デバッグの観点
プログラムをデバッグモードで起動すると、Eclipseはデバッグパースペクティブに切り替えるオプションを表示します。 デバッグパースペクティブは、デバッガーの視覚化と操作に役立ついくつかの便利なビューのコレクションです。
いつでも手動でデバッグパースペクティブに切り替えることができます。
これに含まれる最も便利なビューのいくつかを次に示します。
- デバッグビュー–これはさまざまなスレッドとコールスタックトレースを表示します
- 変数ビュー–これは任意のポイントでの変数の値を表示します。 静的変数を確認する必要がある場合は、明示的に指定する必要があります
- ブレークポイント–これは、さまざまなブレークポイントとウォッチポイントを示しています(以下で説明します)。
- デバッグシェル–これにより、デバッグ中にカスタムコードを記述して評価できます(例については後で説明します)。
3. テクニック
このセクションでは、Eclipseでのデバッグをマスターするのに役立ついくつかの重要なテクニックについて説明します。
3.1. 変数
実行中の変数の値は、変数ビューで確認できます。 静的変数を表示するには、ドロップダウンオプションJava->[静的変数の表示]を選択します。
変数ビューを使用すると、実行中に任意の値を目的の値に変更できます。
たとえば、いくつかの数値をスキップして直接数値80から開始する必要がある場合は、変数numberの値を変更することでそれを行うことができます。
3.2. 値の検査
Java式またはステートメントの値を検査する必要がある場合は、以下に示すように、エディターで特定の式を選択して右クリックし、検査することができます。 便利なショートカットは、式で Ctrl + Shift + Iを押して、値を確認することです。
この式を永続的に検査する必要がある場合は、右クリックして監視できます。これで、これが[式]ビューに追加され、この式の値をさまざまな実行で確認できます。
3.3. デバッグシェル
デバッグセッションのコンテキストでは、カスタムコードを記述して実行し、可能性を評価できます。これはデバッグシェルで実行されます。
たとえば、 sqrt 機能の正しさをクロスチェックする必要がある場合は、デバッグシェルで行うことができます。 コードで、右クリック-> [Inspect ]をクリックして、値を確認します。
3.4. 条件付きブレークポイント
特定の条件に対してのみデバッグしたい場合があります。 これは、次の2つの方法のいずれかでブレークポイントに条件を追加することで実現できます。
- ブレークポイントを右クリックして、[ブレークポイントのプロパティ]を選択します
- ブレークポイントビューで、ブレークポイントを選択し、条件を指定します
たとえば、 number が10に等しい場合にのみ、実行を一時停止するブレークポイントを指定できます。
3.5. ウォッチポイント
What ブレークポイントはメソッド用、ウォッチポイントはクラスレベル変数用です。 この現在の例では、evenPerfectSquareNumbers宣言のブレークポイントはウォッチポイントと呼ばれます。 これで、デバッガーは、ウォッチポイントでフィールドにアクセスまたは変更するたびに実行を一時停止します。
これはデフォルトの動作であり、ウォッチポイントのプロパティで変更できます。
この例では、完全な正方形が偶数になるたびにデバッガーが実行を停止します。
3.6. トリガーポイント
大量のソースコードを含むアプリケーションで複雑な問題をデバッグしていると仮定しましょう。 ブレークポイントが散在しているため、デバッガーはフローを中断し続けます。
ブレークポイントがトリガーポイントとしてマークされている場合、このブレークポイントがヒットした場合にのみ、残りのブレークポイントが有効になることを意味します。
たとえば、以下のスクリーンショットでは、 isPerfectSquare()のブレークポイントは、ループ内のすべての反復でヒットすることになっています。 ただし、calculateCount()メソッドのブレークポイントを条件とともにトリガーポイントとして指定しました。
したがって、反復回数が10に達すると、残りのブレークポイントがトリガーされます。 したがって、今後、 isPerfectSquare()のブレークポイントにヒットすると、実行が一時停止されます。
3.7. リモートデバッグ
最後に、アプリケーションがEclipseの外部で実行されている場合でも、リモートアプリケーションでデバッグが許可されていれば、上記のすべての機能を使用できます。 Eclipseから、リモートJavaアプリケーションとしてデバッグを選択します。
4. 結論
このクイックガイドでは、EclipseIDEでプログラムをデバッグするための基本とさまざまな手法について説明しました。
いつものように、この演習で使用されるソースコードは、GitHubでから入手できます。