プログラムのステップスルー
ステップは、プログラムの段階的な実行を制御するプロセスです。
デバッグセッションを 開始し、 プログラムを一時停止すると、IntelliJ IDEA は一連のステップアクションを提供します。 ステップアクションの選択は、次の行に直接移動する必要があるか、中間のメソッド呼び出しも インスペクションする必要があるかなど、戦略によって異なります。
ステップボタンは、 デバッグ ツールウィンドウの ツールバーにあります。

ステップオーバー
現在のコード行をステップオーバーし、ハイライトされた行にメソッド呼び出しが含まれている場合でも、次の行に移動します。 メソッドの実装はスキップされ、呼び出し元メソッドの次の行に直接移動します。
この例では、5 行目が実行されようとしています。 ステップオーバーすると、デバッガーは count() メソッドにアクセスせずに 6 行目に直接移動します。
スキップされたメソッド内にブレークポイントがある場合、デバッガーはそれらで停止します。 途中でブレークポイントをスキップするには、 強制ステップオーバー。
ステップイン
メソッドに入り、その内部で何が起こるかを表示します。
回線上に複数のメソッド呼び出しがある場合、IntelliJ IDEA は入力するメソッドを確認します。 この機能は スマートステップインと呼ばれます。
回線に複数のメソッド呼び出しがあるたびに スマートステップイン が自動的に使用されるように構成できます。 または、 明示的にそうした場合にのみ呼び出すことができます。 この機能を構成するには、 に移動し、必要に応じて 常にスマートステップインする オプションを設定します。
一部のメソッド (たとえば、 System などの標準 Java クラスのメソッド) は、通常はデバッグする必要がないため、 ステップイン によってスキップされます。 このリストは、 設定 ダイアログ (Ctrl+Alt+S) の ページで微調整できます。
スマートステップイン
スマートステップインは、1 行に複数のメソッド呼び出しがあり、どのメソッドに入るかについて具体的に知りたい場合に役立ちます。 この機能により、目的のメソッド呼び出しを選択できます。
メニューから スマートステップイン を選択するか、 Shift+F7 を押します。
メソッドをクリックします。 または、矢印キーまたは Tab キーを使用してメソッドを選択し、 Enter または F7 を押して選択を確定します。

回線で複数のメソッド呼び出しがあるたびに、通常の ステップイン(I) の代わりに スマートステップイン(P) を使用するように構成できます。 これは で行われます。
ステップアウト
現在のメソッドから抜け出し、呼び出し元のメソッドに移動します。
コードブロックのステップアウト
囲んでいるメソッドを終了せずに、 if ステートメントや for ループなどの現在実行中のコードブロックからステップアウトします。
この例では、アクションは for ループを終了します。 ループは実行され、各反復をステップ実行したかのようにすべての数値がコンソールに出力されることに注意してください。
カーソル位置まで実行
キャレットの位置に達するまで実行を継続します。
プログラムを一時停止する行にキャレットを置きます。
メニューから カーソル位置まで実行 を選択するか、 Alt+F9 を押します。
また、線の上にマウスを移動して カーソル位置まで実行(C) アイコンをクリックすると、 カーソル位置まで実行(C) を実行できます。

カーソル位置まで実行(C) が の行番号をクリックする際に動作するかどうかを構成できます。
この例では、 カーソル位置まで実行 は実行を継続し、ブレークポイントがあったかのように count() メソッドの後に停止します。 スキップされたコードに実際のブレークポイントがある場合は、プログラムはそこに到達すると中断されます。
途中でブレークポイントをスキップするには、 カーソル位置まで強制実行を使用します。
マルチスレッド実行の場合、 カーソル位置まで実行 は現在のスレッドまたはコルーチンでのステップ実行中を維持しようとします。 別のスレッドが元のスレッドより先にターゲット行に到達した場合、IntelliJ IDEA は後から到達したスレッドを保留し、元のスレッドが追いつくまで 1 秒待機します。 タイムアウト後、IntelliJ IDEA はその後のスレッドでプログラムを一時停止し、その旨を通知します。 複数のスレッドまたはコルーチンがその到達先に達した場合、 カーソル位置まで実行 はデフォルトで現在のスレッドを待機し、先に一時停止されたスレッドの実行を再開します。
カーソルまで実行で実行時間を測定
カーソル位置まで実行 を使用すると、スキップされたコード箇所の実行時間が記録され、各行にラベルがガターへ追加されます。 ラベル を使用してメソッドの実装へ移動できます。その行にも同じ型の パフォーマンス ラベル が付与されます。

この機能をオフにするには、ラベルを右クリックして カーソル位置まで実行で時間の記録を無効にする を選択します。
強制ステップイン
このメソッドが通常の ステップイン によって スキップされた場合でも、メソッドのステップ。
この例では、 System.out.println() メソッドの実装に直接移動しますが、通常の ステップイン はループの次の反復に進みます。
カーソル位置まで強制実行
キャレットの位置に到達するまで 実行し続けます。 途中のブレークポイントはすべて無視されます。
プログラムを一時停止する行にキャレットを置きます。
メニューから カーソル位置まで強制実行 を選択するか、 Ctrl+Alt+F9 を押します。
強制ステップオーバー
ステップオーバーは、現在のコード行をスキップして、現在の行にメソッド呼び出しが含まれている場合でも次の行に移動します。 呼び出されたメソッドにブレークポイントがある場合は無視されます。
フレームのリセット
最後のフレームを元に戻し、スタック内の前のフレームを復元できます。 これは、たとえば、誤って足を踏みすぎた場合や、クリティカルスポットを逃した機能を再入力したい場合に便利です。
このオプションはローカル変数にのみ影響し、静的およびインスタンス変数の値を元に戻さないため、プログラム全体の状態は復元されないことに注意してください。 これにより、プログラムフローが変更される可能性があります。
スレッド タブで、リセットするフレームにマウスを移動し、表示される フレームのリセット ボタンをクリックします。

この例では、フレームをドロップすると、 count が実行されなかったかのように main() に戻ります。 影響を受ける静的変数やインスタンス変数はありませんが、すでに生成されていて副作用と見なすことができるコンソール出力はそのまま残ります。
スキップされたブレークポイントのトラブルシューティング
IntelliJ IDEA は、次の状況ではブレークポイントをスキップすることがあります。
カーソル位置まで実行 のステップ実行または実行中に、別のスレッドでブレークポイントがヒットしました。
自動式や監視などの機能によって評価されたコードブロック内でブレークポイントがヒットしました。
デバッグセッションにとって重要なブレークポイントでこの問題が発生した場合は、IntelliJ IDEA がブレークポイントを見逃さないように次の手順を実行します。
現在のスレッドを一時停止するだけのブレークポイントからステップまたは カーソル位置まで実行 を実行します。
次の機能をオフにします。
ステップ速度を改善する
デバッガー機能はリソースを消費し、ステップのパフォーマンスに影響を与える可能性があります。 パフォーマンスが十分でない場合は、この章に記載されている推奨事項に従って最適化してください。
オーバーヘッド機能を使用して、パフォーマンス低下の原因を特定します。
次の機能がプロジェクトに必要ない場合は、使用を無効化または最小化します。
メソッド戻り値の表示 オプション。 デバッガーのツールバーの からアクセスできます。
コレクションクラスの代替ビュー オプション ()
「toString」オブジェクトビュー ()
ブレークポイントとウォッチポイントの条件、特に頻繁にヒットするものを単純化します。
デバッグセッション中に、より少ない要素でビューに切り替えます。
ステップ動作を構成する
Ctrl+Alt+S を押して設定を開き、 を選択します。
オプション | 説明 |
|---|---|
合成メソッドをスキップする | このチェックボックスを選択すると、デバッグ中に合成メソッド(コンパイラーによって生成されたメソッド)にステップインしないようにします。 |
コンストラクターをスキップする | このチェックボックスを選択すると、デバッグ中にコンストラクターにステップインしないようにします。 |
クラスローダーをスキップする | デバッグ中にクラスローダーにステップインしないようにするには、このチェックボックスを選択します。 |
単純な getter はスキップする | デバッグ中に単純な getter メソッド(つまり、必要な値を返すように設計されたメソッド)へのステップインを抑制するためにこのチェックボックスを選択します。 |
クラスにステップインしない | デバッグ中に指定されたクラスにステップインしないようにするには、このチェックボックスを選択します。 クラスのリストには、次の 2 つのタイプのエントリが含まれます。
デフォルトでは、このリストにはいくつかの標準 Java SDK クラスパターンが含まれているため、Java クラスライブラリに時間を浪費する必要はありません。 特定のパターンを一時的に無効 / 有効にするには、リストのチェックボックスを使用します。
|
最終的にポップフレームのブロックを評価する | ポップフレームで |
現在のスレッドのみ再開 | ステップするときにアクティブなスレッドのみを再開する必要がある場合は、このチェックボックスを選択します。 |