プログラムの実行フローを変更する
アプリケーションをデバッグする際は、通常、プログラムの通常のフローに従います。 ただし、通常のフローから逸脱する必要がある場合もあります。
これは、特定の条件を再現したり、プログラムが null や例外などの特殊なケースをどのように処理するかをテストしたりするために必要になることがあります。 また、現在調査している問題に関係のないプログラムの特定の部分をスキップする必要がある場合にも便利です。
前のスタックフレームに戻る
IntelliJ IDEA を使用すると、プログラムの実行フローで前のスタックフレームに戻ることができます。 これは、たとえば、誤ってステップを踏みすぎてしまい、重要な箇所を見逃したメソッドに再度入りたい場合などに便利です。
スレッド タブで、リセットするフレームにマウスを移動し、表示される フレームのリセット ボタンをクリックします。

ブレークポイント式を使用する
プログラムの流れを変更するには、ヒット時に 式を評価する 非中断ブレークポイントを使用します。 これは、たとえばデバッグ中に変数を自動的に変更したい場合などに便利です。
この例では、 readyToExit を false にリセットすると、 printHello メソッドがリセットされるブレークポイントを無効にするまで何度も実行されます。
また、デバッグ時にのみ使用するロジックを追加するために、ブレークポイント式を利用できます。
上記の例では、ブレークポイントを使用して addDebugLogic フラグの値を変更し、必要なデバッグ固有の動作を追加することができます。
式を使用して非中断ブレークポイントを追加する
プログラムの状態を変更する行の ブレークポイントを追加します。
新しいブレークポイントのプロパティで、 中断 チェックボックスをオフにし、 評価して記録 フィールドにプログラムの状態を変更する式を入力します。
現在のメソッドからの強制的な復帰
返却 ステートメントに到達する前にメソッドを終了し、任意の値を返すようにすることができます。 これは、問題がメソッドの戻り値に関係し、生成方法に関係しない場合に役立ちます。 強制リターン は、これらの値につながる条件を再現することなく、プログラムによって戻り値がどのように処理されるかをテストできます。
強制リターン を使用すると、現在の実行ポイントの後の命令は無視されます。
現在のメソッドが フレーム タブで選択されていることを確認し、タブ内の任意の場所を右クリックして、 強制リターン を選択します。

メソッドが値を返す場合(戻り値の型は
voidではありません)、値またはそれを計算する式を指定します。
式はローカルコンテキストで評価され、すでに宣言されている任意のローカル変数を使用できます。 戻り値は、メソッドの戻り値型に準拠する必要があります。
実行ポイントが現在
try、catch、finallyブロックにあり、finallyに実行されていないコード行がある場合は、スキップするかどうかを選択します。
例外をスローする
IntelliJ IDEA を使用すると、現在実行中のメソッドから例外またはエラーをスローできます。 これは、原因を再現したりコードを変更したりせずに、特定の種類の例外がどのように処理されるかをテストする場合に便利です。
現在のメソッドを フレーム タブで選択し、タブ内の任意の場所を右クリックして、 例外スロー を選択します。

例外を作成します (これは、
エラーやメソッドによって処理されないチェック例外を含む任意のThrowableになります)。 式ではスローキーワードを使用しないでください (例:new NullPointerException()
)。
修正されたクラスを再ロードする
コードに変更を加える場合、プロセスをシャットダウンせずに実行時にどのように動作するかをすぐに確認したい場合があります。 ホットスワップメカニズムを使用すると、デバッグセッション中に変更されたクラスを再ロードすることで、これが可能になります。
変更されたすべてのファイルを再読み込み
エディター内で右クリックし、 変更されたファイルをコンパイルして再ロードする を選択します。
コードが変更されました ポップアップで ホットスワップの適用 をクリックします。 デバッグ中にコードを変更した後に表示されます。

で クラスをリロードする前にプロジェクトをビルドする オプションが有効になっている場合は、再コンパイルが自動的に行われます。 そうでない場合は、再ロードする前にファイルを再コンパイルする必要があります ( Ctrl+Shift+F9)。
再コンパイルの範囲はビルドツールによって異なります。 例:Gradle と Maven はモジュール全体を再コンパイルしますが、IntelliJ IDEA のビルドシステムは変更されたファイルのみを再コンパイルします。
変更されたファイルを 1 つだけ再読み込みする
Ctrl+Shift+A を押す。
開いた どこでも検索ダイアログで、
Compile And Reload Fileと入力し、対応するアクションを選択して、 Enter を押します。
の コンパイル後のクラスリロード オプションを使用して、クラスが再コンパイルされた後に、クラスの自動再ロードを設定できます。 自動再ロードをオン / オフにしたり、特定のケースごとにファイルを再ロードするかどうかを確認するようにデバッガーを設定したりできます。
HotSwap の制限
VM の設計により、HotSwap には次の制限があります。
メソッド本体が変更された場合のみ利用可能です。 シグネチャーの変更はサポートされていません。
クラスメンバーの追加と削除はサポートされていません
変更されたメソッドがすでにコールスタック内にある場合、変更はプログラムが変更されたメソッドを終了した後にのみ有効になります。 その瞬間まで、メソッド本体は変更されません。 この場合、フレームは 廃止 として表示されます。
標準 VM によって課せられた制限を削除する場合は、実行時のクラスの再ロードを無制限にサポートする Dynamic Code Evolution VM を使用できます。