Eclipseを使用したデバッグ

1. 概要

このクイックガイドでは、Eclipse IDEを使用して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_]を選択します
    (下のスクリーンショットに表示)

  • _Debug_ツールバーのプログラム(下のスクリーンショットで強調表示)

    link:/uploads/debugeclipse1-100x54.jpg%20100w []

2.2. ブレークポイント

調査のために、プログラムの実行を一時停止するポイントを定義する必要があります。 *これらはブレークポイントと呼ばれ、メソッドに適用できます。*実行前または実行中にいつでも定義できます。
基本的に、プログラムにブレークポイントを追加するには3つの方法があります。
  • に対応するマーカーバー(垂直ルーラー)を右クリックします
    行とブレークポイントの切り替えを選択します(下のスクリーンショットに表示)

  • エディターで必要な行でCtrl + Shift + Bを押します

  • に対応するマーカーバー(垂直ルーラー)をダブルクリックします
    必要な行

    link:/uploads/debug_eclipse2-100x83.jpg%20100w []

2.3. コードフロー制御

デバッガーが指定されたブレークポイントで停止したので、さらに実行を進めることができます。
以下のスクリーンショットのように、デバッガーが現在16行目に配置されていると仮定します。
link:/uploads/debug_eclipse3-100x66.jpg%20100w []
最も一般的に使用されるデバッグオプションは次のとおりです。
  • * _ステップイン(F5)–_この操作は、
    現在の行(ある場合);それ以外の場合は、次の行に進みます。 この例では、_isPerfectSquare()_メソッド内でデバッガーを使用します

  • * _ステップオーバー(F6)–この操作は現在の行を処理し、
    次の行に進みます。*この例では、_isPerfectSquare()_メソッドを実行し、次の行に進みます。

  • * _ステップリターン(F7)–この操作は現在のメソッドを終了し、
    呼び出し元のメソッドに戻ります。*この場合、ループにブレークポイントがあるため、まだメソッド内にあります。それ以外の場合は、メインメソッドに戻ります。

  • * _再開(F8)–この操作は、
    プログラムが終了するまで実行*

2.4. デバッグパースペクティブ

プログラムをデバッグモードで起動すると、Eclipseはデバッグパースペクティブに切り替えるオプションを表示します。 *デバッグパースペクティブは、デバッガーの視覚化と対話に役立ついくつかの便利なビューのコレクションです。*
また、いつでも手動でデバッグパースペクティブに切り替えることができます。
これに含まれる最も便利なビューの一部を次に示します。
  • デバッグビュー –さまざまなスレッドとコールスタックトレースを表示します

  • 変数ビュー –これは、任意の特定の変数の値を表示します
    ポイント。 静的変数を見る必要がある場合、明示的に指定する必要があります

  • * Breakpoints * –さまざまなブレークポイントとウォッチポイントを表示します
    (以下に表示されます)

  • デバッグシェル –これにより、カスタムコードを記述および評価できます。
    デバッグ(例については後で説明します)

    link:/uploads/debug_eclipse4-100x52.jpg%20100w []

3. テクニック

このセクションでは、Eclipseでデバッグをマスターするのに役立ついくつかの重要なテクニックを説明します。

3.1. 変数

実行中の変数の値は、変数ビューで確認できます。 静的変数を表示するには、ドロップダウンオプション_Java-> [静的変数の表示]を選択します。
*変数ビューを使用すると、実行中に任意の値を目的の値に変更できます。*
たとえば、いくつかの番号をスキップして、番号80から直接開始する必要がある場合、変数_number_の値を変更することでそれを行うことができます。
link:/uploads/debug_eclipse5-100x46.jpg%20100w []

3.2. 値の検査

Javaの式またはステートメントの値を検査する必要がある場合は、以下に示すように、エディターで特定の式を選択して右クリックし、検査することができます。 便利なショートカットは、式に*ヒット_Ctrl Shift I_を押して値を表示することです*
link:/uploads/debug_eclipse6-100x54.jpg%20100w []
link:/uploads/debug_eclipse7-100x52.jpg%20100w []
*この式を恒久的に検査する必要がある場合は、右クリックしてウォッチすることができます*。これが式ビューに追加され、この式の値が異なる実行で表示されます。

3.3. デバッグシェル

デバッグセッションのコンテキストでは、*カスタムコードを記述および実行して、可能性を評価できます。*これは、デバッグシェルで行われます。
たとえば、_sqrt_機能の正確性を相互確認する必要がある場合は、デバッグシェルで確認できます。 コードで、_右クリック-> Inspect_で値を確認します。
link:/uploads/debug_eclipse8-100x52.jpg%20100w []

link:/uploads/debug_eclipse9-100×68.jpg%20100w []

3.4. 条件付きブレークポイント

特定の条件でのみデバッグしたい場合があります。 *これを実現するには、次の2つの方法のいずれかでブレークポイントに条件を追加します*。
  • ブレークポイントを右クリックして、[ブレークポイントのプロパティ]を選択します

  • ブレークポイントビューで、ブレークポイントを選択し、条件を指定します

    たとえば、_number_が10に等しい場合にのみ実行を中断するブレークポイントを指定できます。
    link:/uploads/debug_eclipse10-100x52.jpg%20100w []

3.5. ウォッチポイント

  • What * ブレークポイントはメソッド用、ウォッチポイントはクラスレベル変数用です。 この現在の例では、_evenPerfectSquareNumbers_宣言のブレークポイントはウォッチポイントと呼ばれます。 これで、ウォッチポイントでフィールドがアクセスまたは変更されるたびに、デバッガーは実行を一時停止します。

    これはデフォルトの動作であり、ウォッチポイントのプロパティで変更できます。
    この例では、デバッガーは完全な正方形が偶数になるたびに実行を停止します。
    link:/uploads/debug_eclipse11-100x52.jpg%20100w []

3.6. トリガーポイント

大量のソースコードを持つアプリケーションの複雑な問題をデバッグしていると仮定しましょう。 デバッガーは、ブレークポイントが散在しているため、フローを中断し続けます。
*ブレークポイントがトリガーポイントとしてマークされている場合、このブレークポイントにヒットした場合にのみ、残りのブレークポイントが有効になります。*
たとえば、次のスクリーンショットでは、_isPerfectSquare()_のブレークポイントはループ内のすべての反復でヒットすることになっています。 ただし、条件とともに、_calculateCount()_メソッドのブレークポイントをトリガーポイントとして指定しました。
したがって、反復カウントが10に達すると、残りのブレークポイントがトリガーされます。 したがって、今後、_isPerfectSquare()_のブレークポイントにヒットすると、実行が中断されます。
link:/uploads/debug_eclipse12-100x52.jpg%20100w []

3.7. リモートデバッグ

最後に、アプリケーションがEclipseの外部で実行されている場合、リモートアプリケーションでデバッグが許可されていれば、上記のすべての機能を引き続き使用できます。 Eclipseから、* https://www.baeldung.com/spring-debugging [リモートJavaアプリケーションとしてデバッグ] *を選択します。

4. 結論

このクイックガイドでは、Eclipse IDEでプログラムをデバッグするための基本的なテクニックとさまざまなテクニックを紹介しました。
いつものように、この演習で使用されるソースコードはhttps://github.com/eugenp/tutorials/tree/master/java-math[GitHubで]から入手できます。