IntelliJ IDEA 2023.2 ヘルプ

チュートリアル: 最初の Java アプリケーションをデバッグする

Java アプリケーションを作成して実行しました。期待どおりに機能しないことに気付いたとしましょう。例: 間違った値を返すか、例外でクラッシュします。コードにエラーがあるようです。それをデバッグする時が来ました。

デバッグとは

一般的に、デバッグとは、プログラム内のエラーを検出して修正するプロセスです。

さまざまな種類のエラーがあり、処理します。それらのいくつかは、コンパイラーによって処理されるため、構文エラーのように簡単にキャッチできます。もう 1 つの簡単なケースは、スタックトレースを調べることでエラーをすばやく特定できる場合です。これにより、エラーが発生した場所を特定できます。

ただし、非常に扱いが難しく、発見して修正するのに非常に時間がかかるエラーもあります。例: プログラムの早い段階で発生した微妙なロジックエラーは、非常に遅くまで顕在化しない場合があり、場合によっては問題を解決することが非常に困難になります。

これは、デバッガーが便利な場所です。デバッガーは強力なツールであり、プログラムの内部操作に関するインサイトを提供することにより、バグをより迅速に見つけることができます。これは、実行を一時停止し、変数と行がどのように変更されるかを徹底的に調べることでプログラムの状態を分析することで可能です。デバッグ中は、すべてを制御できます。このマニュアルでは、開始するための基本的なデバッグシナリオについて説明します。

コードを調べる

簡単なデバッグのケースを試してみましょう。次のアプリケーションがあるとします。

public class AverageFinder { public static void main(String[] args) { System.out.println("Average finder v0.1"); double avg = findAverage(args); System.out.println("The average is " + avg); } private static double findAverage(String[] input) { double result = 0; for (String s : input) { result += Integer.parseInt(s); } return result; } }

プログラムは、コマンドライン引数として渡されるすべての値の平均を計算することになっています。

問題なくコンパイルおよび実行されます。ただし、結果は期待したものではありません。たとえば、入力として 1 2 3 を渡すと、結果は 6.0 になります。

まず第一に、疑わしいエラーがどこから来ているのかを考える必要があります。問題は print ステートメントにはないと推測できます。ほとんどの場合、予期しない結果が findAverage メソッドから得られます。原因を見つけるために、実行時の動作を調べてみましょう。

ブレークポイントの設定

プログラムが実行時にどのように動作するかを調べるには、疑わしいコードの前に実行を一時停止する必要があります。これは、ブレークポイントを設定することによって行われます。ブレークポイントは、プログラムの状態を調べるためにプログラムが中断されるコード行を示します。

  • findAverage メソッドが呼び出される行のガターをクリックします。

    A breakpoint is set at the line that calls the findAverage method

デバッグモードでプログラムを実行する

次に、デバッグモードでプログラムを開始しましょう。

プログラムを実行およびデバッグするための引数を渡すため、実行 / デバッグ構成にこれらの引数があることを確認してください。

  1. ガターの実行アイコンをクリックしてから、実行構成の変更を選択します。

    Run button in the gutter
  2. プログラム引数フィールドに引数を入力します。

    Arguments are entered in the Program arguments field
  3. main メソッドの近くにある実行ボタンをクリックします。メニューからデバッグを選択します。

    After you click a Run button in the gutter, a menu with run/debug options appears.

プログラムの状態を分析する

デバッガーセッションが開始された後、ブレークポイントに達するまでプログラムは正常に実行されます。これが発生すると、プログラムが一時停止した行がハイライトされ、デバッグツールウィンドウが表示されます。

Debug tool window appears. The line with the breakpoint is highlighted

ハイライトされた行はまだ実行されていません。これで、プログラムはあなたからのさらなる指示を待ちます。中断状態では、プログラムの状態を保持する変数を調べることができます。

findAverage メソッドはまだ呼び出されていないため、result などのすべてのローカル変数はまだスコープ内にありませんが、args 配列の内容を調べることができます(argsmain メソッドのスコープ内にあります)。args の内容は、args が使用されるインラインで表示されます。

Inline debugging shows variable values right at the line where the respective variables are used

また、変数パネルで現在スコープ内にあるすべての変数に関する情報を取得することもできます。

Variable values are shown in the Variables panel

プログラムのステップスルー

デバッグツールウィンドウに慣れたところで、findAverage メソッドにステップインして、その内部で何が起こっているかを調べます。

  1. メソッドにステップインするには、ステップインボタンをクリックするか、F7 を押します。

    Step into button located in the top part of the Debug tool window

    実行ポイントを 1 ステップ進めたため、エディターで別の行がハイライトされます。

  2. ステップオーバー F8 でステップを続行します。ステップインとの違いに注意してください。また、実行を 1 歩進めますが、途中で Integer.parseInt() などの他のメソッドを訪問することはありません。

    ステップを続けて、ローカル変数 result がどのように宣言され、ループの各反復でどのように変更されるかを見てみましょう。

    Inline debugging helps us get information about the variable values

    現在、変数 s には値 "3" が含まれています。int に変換され、現在 3.0 の値を持つ result に追加されます。これまでのところエラーはありません。合計は正しく計算されます。

  3. さらに 2 つのステップを経て return ステートメントにたどり着き、どこが省略されているかがわかります。入力数で割らずに 6.0 の値を持つ result を返します。これが、誤ったプログラム出力の原因でした。

    The value of result is returned as is, without dividing it by the number of arguments.
  4. エラーを修正しましょう。

    return result / input.length;

デバッガーセッションを停止し、プログラムを再実行する

プログラムが正常に動作することを確認するために、デバッガーセッションを停止してプログラムを再実行しましょう。

  1. Stop ボタンをクリックするか、Control+F2 を押します。

    Debugger session is stopped using the Stop button located in the left-hand part of the Debug tool window
  2. main メソッドの近くにある実行ボタンをクリックします。メニューから実行を選択します。

    After you click a Run button in the gutter, a menu with run/debug options appears.
  3. ここでプログラムが正しく機能することを確認します。

    The program outputs 2.0 now

関連ページ:

初めての Java アプリケーションを作成する

このチュートリアルでは、をシステム出力に出力する簡単な Java アプリケーションを作成、実行、パッケージ化する方法を学びます。その過程で、開発者としての生産性を向上させるための IntelliJ IDEA の機能、つまりコーディングアシスタントと補助的なツールに慣れましょう。プロジェクトを準備する:新規 Java プロジェクトを作成する IntelliJ IDEA では、プロジェクトを使用して、ソースコード、テスト、使用するライブラリ、ビルド手順、個人設定を 1 つのユニットに整理できます。I...

プログラムの実行フローを変更する

アプリケーションのデバッグ中は、通常、プログラムの通常のフローに従います。ただし、それから逸脱する必要がある場合があります。これは、特定の条件を再現するため、またはプログラムが問題を処理する方法をテストするために必要になる場合があります(たとえば、値の処理や例外の処理)。また、これは、現在調査中の問題に関係のないプログラムの特定の部分をスキップする必要がある場合に便利です。前のスタックフレームに戻る:IntelliJ IDEA を使用すると、プログラムの実行フローで前のスタックフレームにフォー...

チュートリアル: 値の設定

このチュートリアルでは、最も基本的ではありますが非常に便利なデバッガー機能の 1 つである値の設定の使用方法を学習します。デバッグ中に、プログラムが特定の方法で動作する理由を理解するために変数に関する情報を取得し、調べます。また、変数に依存するバグを再現したい場合もあります。これを行うには、この変数に特定の値を保持する必要があります。実行時にプログラムを変更せずに一部の条件を再現するのは退屈で時間がかかる場合があるため、ほとんどの場合、デバッガーから直接変数値を設定することでメリットが得られます...