プログラムのステップスルー
ステップは、プログラムの段階的な実行を制御するプロセスです。
IntelliJ IDEA は、戦略に応じて使用される一連のステップアクションを提供します(たとえば、次の行に直接移動するか、途中で呼び出されたメソッドを入力する必要があるかなど)。
ステップボタンは、デバッグウィンドウのツールバーにあります。
![デバッグツールウィンドウのステップボタン Stepping buttons in the Debug tool window](https://resources.jetbrains.com/help/img/idea/2024.1/debug_examining_stepping_buttons.png)
ステップオーバー
現在のコード行をステップオーバーし、ハイライトされた行にメソッド呼び出しが含まれている場合でも、次の行に移動します。メソッドの実装はスキップされ、呼び出し元メソッドの次の行に直接移動します。
ステップオーバーボタン
をクリックするか、F8 を押します。
この例では、5 行目が実行されようとしています。ステップオーバーすると、デバッガーは count()
メソッドに移動することなく、6 行目に直接移動します。
![メソッド呼び出しのステップオーバー Stepping over a method call](https://resources.jetbrains.com/help/img/idea/2024.1/debug_examining_step_into_example_1.png)
スキップされたメソッド内にブレークポイントがある場合、デバッガーはそれらで停止します。途中でブレークポイントをスキップするには、強制ステップオーバーを使用します。
![次のコード行にステップオーバーしました Step over took us to the next line of code](https://resources.jetbrains.com/help/img/idea/2024.1/debug_examining_step_over_example_2.png)
ステップイン
メソッドにステップインして、その内部で何が起こるかを示します。このオプションは、メソッドが正しい結果を返していることが確実でない場合に使用します。
ステップインボタン
をクリックするか、F7 を押します。
この例では、5 行目が実行されようとしています。ステップインすると、デバッガーは count(int to)
メソッドの実装に移動し、その結果がどのように生成されるかを詳細に調べることができます。
![メソッドのステップイン Stepping in a method](https://resources.jetbrains.com/help/img/idea/2024.1/debug_examining_step_into_example_1.png)
回線上に複数のメソッド呼び出しがある場合、IntelliJ IDEA は入力するメソッドを確認します。この機能はスマートステップインと呼ばれます。
![メソッドの内部 Inside the method](https://resources.jetbrains.com/help/img/idea/2024.1/debug_examining_step_into_example_2.png)
回線に複数のメソッド呼び出しがあるたびにスマートステップインが自動的に使用されるように構成できます。または、明示的にそうした場合にのみ呼び出すことができます。この機能を構成するには、 に移動し、必要に応じて常にスマートステップインするオプションを設定します。
一部のメソッド (たとえば、System
などの標準 Java クラスのメソッド) は、通常はデバッグする必要がないため、ステップインによってスキップされます。このリストは、設定ダイアログ (Ctrl+Alt+S) の ページで微調整できます。
スマートステップイン
スマートステップインは、1 行に複数のメソッド呼び出しがあり、どのメソッドに入るかについて具体的に知りたい場合に役立ちます。この機能により、目的のメソッド呼び出しを選択できます。
メニューからスマートステップインを選択するか、Shift+F7 を押します。
メソッドをクリックします。矢印キーまたはタブを使用して選択し、Enter/F7 を押すこともできます。
回線で複数のメソッド呼び出しがあるたびに、通常のステップインの代わりにスマートステップインを使用するように構成できます。これは で行われます。
ステップアウト
現在のメソッドから抜け出し、呼び出し元のメソッドに移動します。
ステップアウトボタン
をクリックするか、Shift+F8 を押します。
この例では、ステップアウトするとループのすべての反復がスキップされ、main
メソッド (呼び出し元) に直接移動します。
![ステップアウトは、メソッドが完了するまで実行を継続する Step out continues the execution until the method is complete](https://resources.jetbrains.com/help/img/idea/2024.1/debug_examining_step_out_example.png)
コードブロックのステップアウト
現在実行されているコードブロックからステップアウトします。これにより、囲んでいるメソッドを終了せずに、while
、for
などの残りの反復をスキップできます。
メインメニューで、
に移動します。
この例では、アクションによって for
ループが終了し、12 行目に移動します。ループは実行され、出力は、反復ごとにステップ実行したかのようにコンソールに表示されます。
![for ループから抜け出しますが、メソッドからは抜けません Steps out of the for loop but not the method](https://resources.jetbrains.com/help/img/idea/2024.1/debug_step_out_of_block.png)
カーソル位置まで実行
キャレットの位置に達するまで実行を継続します。
プログラムを一時停止する行にキャレットを置きます。
メニューからカーソル位置まで実行を選択するか、Alt+F9 を押します。
また、線の上にマウスを移動してカーソル位置まで実行アイコンをクリックすると、カーソル位置まで実行を実行できます。
![ワンクリックでカーソルまで実行 Run to Cursor with a single click](https://resources.jetbrains.com/help/img/idea/2024.1/inlay-run-to-cursor.png)
カーソル位置まで実行が の行番号をクリックする際に動作するかどうかを構成できます。
この例では、カーソル位置まで実行は実行を継続し、ブレークポイントがあるかのように 7 行目で停止します。count()
メソッドにブレークポイントがある場合、プログラムはそこで中断されます。
![キャレットは、行きたいコードの中にあります Caret is in the piece of code where we want to go](https://resources.jetbrains.com/help/img/idea/2024.1/debug_examining_run_to_cursor_example.png)
途中でブレークポイントをスキップするには、カーソル位置まで強制実行を使用します。
強制ステップイン
このメソッドが通常のステップインによってスキップされた場合でも、メソッドのステップ。
メニューから強制ステップインを選択するか、Alt+Shift+F7 を押します。
この例では、System.out.println()
を呼び出しようとしている行の直前で実行が中断されます。
![無視されたクラスのリストを無視するステップ Force step into disregards the list of ignored classes](https://resources.jetbrains.com/help/img/idea/2024.1/debug_examining_force_step_into_1.png)
強制ステップインを使用すると、System.out.println()
メソッドの実装にすぐに移動できますが、通常のステップインでは 20 行目になります。
![内側 println() Inside println()](https://resources.jetbrains.com/help/img/idea/2024.1/debug_examining_force_step_into_2.png)
カーソル位置まで強制実行
キャレットの位置に達するまで実行を継続します。途中のブレークポイントはすべて無視されます。
プログラムを一時停止する行にキャレットを置きます。
メニューからカーソル位置まで強制実行を選択するか、Ctrl+Alt+F9 を押します。
この例では、カーソル位置まで強制実行は実行を継続し、ブレークポイントがあるかのように 7 行目で停止します。count()
内のブレークポイントは効果がありません。
![キャレットは、行きたいコードの中にあります Caret is in the piece of code where we want to go](https://resources.jetbrains.com/help/img/idea/2024.1/debug_examining_force_run_to_cursor_example.png)
強制ステップオーバー
現在のコード行をステップオーバーし、ハイライトされた行にメソッド呼び出しが含まれている場合でも、次の行に移動します。呼び出されたメソッドにブレークポイントがある場合、それらは無視されます。
メニューから強制ステップオーバーを選択するか、Alt+Shift+F8 を押します。
この例では、count()
メソッドにブレークポイントがあるにもかかわらず、強制ステップオーバーによって 6 行目の print ステートメントに移動します。そうでない場合、ステップオーバーを使用すると、ループのすべての反復でアプリケーションが一時停止されます。
![呼び出されたメソッドのブレークポイントは無視されます The breakpoint in the called method is going to be ignored](https://resources.jetbrains.com/help/img/idea/2024.1/debug_examining_force_step_over.png)
フレームのリセット
最後のフレームを元に戻し、スタック内の前のフレームを復元できます。これは、たとえば、誤って足を踏みすぎた場合や、クリティカルスポットを逃した機能を再入力したい場合に便利です。
このオプションはローカル変数にのみ影響し、静的およびインスタンス変数の値を元に戻さないため、プログラム全体の状態は復元されないことに注意してください。これにより、プログラムフローが変更される可能性があります。
リセットするフレームにカーソルを合わせ、表示されるフレームのリセットボタンをクリックします。
以下の例では、フレームをドロップすると、count
が実行されなかったかのように 5 行目に戻ります。影響を受けた静的変数やインスタンス変数はありませんが、コンソール出力はすでに生成されており、副作用と見なすことができます。
![ドロップフレームは、メソッドが実行されていないかのように現在のフレームを元に戻する Drop frame undoes the current frame as if the method has not been executed](https://resources.jetbrains.com/help/img/idea/2024.1/debug_examining_step_out_example.png)
スキップされたブレークポイントのトラブルシューティング
IntelliJ IDEA は、次の状況ではブレークポイントをスキップすることがあります。
カーソル位置まで実行のステップ実行または実行中に、別のスレッドでブレークポイントがヒットしました。
自動式や監視などの機能によって評価されたコードブロック内でブレークポイントがヒットしました。
デバッグセッションにとって重要なブレークポイントでこの問題が発生した場合は、IntelliJ IDEA がブレークポイントを見逃さないように次の手順を実行します。
現在のスレッドを一時停止するだけのブレークポイントからステップまたはカーソル位置まで実行を実行します。
次の機能をオフにします。
ステップ速度を改善する
デバッガー機能はリソースを消費し、ステップのパフォーマンスに影響を与える可能性があります。パフォーマンスが十分でない場合は、この章に記載されている推奨事項に従って最適化してください。
オーバーヘッド機能を使用して、パフォーマンス低下の原因を特定します。
次の機能がプロジェクトに必要ない場合は、使用を無効化または最小化します。
メソッド戻り値の表示オプション
Collections クラスの代替ビューオプション ( )
「toString」オブジェクトビュー ( )
ブレークポイントとウォッチポイントの条件、特に頻繁にヒットするものを単純化します。
デバッグセッション中に、より少ない要素でビューに切り替えます。
ステップ動作を構成する
Ctrl+Alt+S を押して設定を開き、
を選択します。必要に応じてステップ動作を構成します。特定のオプションの詳細については、以下の表を参照してください。
オプション | 説明 |
---|---|
合成メソッドをスキップする | このチェックボックスを選択すると、デバッグ中に合成メソッド(コンパイラーによって生成されたメソッド)にステップインしないようにします。 |
コンストラクターをスキップする | このチェックボックスを選択すると、デバッグ中にコンストラクターにステップインしないようにします。 |
クラスローダーをスキップする | デバッグ中にクラスローダーにステップインしないようにするには、このチェックボックスを選択します。 |
単純な getter はスキップする | デバッグ中に単純な getter メソッド(つまり、必要な値を返すように設計されたメソッド)へのステップインを抑制するためにこのチェックボックスを選択します。 |
クラスにステップインしない | デバッグ中に指定されたクラスにステップインしないようにするには、このチェックボックスを選択します。クラスのリストには、次の 2 つのタイプのエントリが含まれます。
デフォルトでは、このリストにはいくつかの標準 Java SDK クラスパターンが含まれているため、Java クラスライブラリに時間を浪費する必要はありません。特定のパターンを一時的に無効 / 有効にするには、リストのチェックボックスを使用します。 |
最終的にポップフレームのブロックを評価する | ポップフレームで |
現在のスレッドのみ再開 | ステップするときにアクティブなスレッドのみを再開する必要がある場合は、このチェックボックスを選択します。 |
関連ページ:
![](https://resources.jetbrains.com/help/img/idea/2024.1/debug_method_breakpoint_menu.png)
ブレークポイント
ブレークポイントは、特定のポイントでプログラムの実行を一時停止する特別なマーカーです。これにより、プログラムの状態と動作を調べることができます。ブレークポイントは、たとえば、特定のコード行に到達したときにプログラムを一時停止するなどの単純なものから、追加の条件をチェックしたり、ログに書き込んだりするなどのより複雑なロジックを含むものまであります。ブレークポイントは、一度設定すると、一時的なブレークポイントを除き、明示的に削除するまでプロジェクト内に残ります。ブレークポイントの種類:Intell
![](https://resources.jetbrains.com/help/img/idea/2024.1/debug_customize_threads.png)
ビューのカスタマイズ
デバッグセッション中に、IntelliJ IDEA は変数、クラス、スレッド、フレームなどに関する情報を表示します。さらに、デバッガーは、プロジェクトのニーズに応じてデータの表示をカスタマイズするためのさまざまなオプションを提供します。デフォルトでは、IntelliJ IDEA は、デバッグツールウィンドウにデバッグの詳細を整理した包括的なビューを表示します。このレイアウトでは、最も一般的に使用されるオプションとアクションが提供されます。ただし、特定の詳細を調べたり、データをフィルタリングしたり...
![](https://pleiades.io/icons/idea.png)
デバッガーのオーバーヘッドを監視する
式を評価するか、コードをステップオーバーするたびに、IntelliJ IDEA はデバッグされるアプリケーションと同じリソースを使用します。これにより、特定の場合に全体的なパフォーマンスに劇的な影響を与える可能性があります。例: 条件が重いブレークポイントは、コード行の補完に必要な時間を大幅に増やす可能性があります。デバッグされたアプリケーションのパフォーマンスが十分でない場合は、オーバーヘッドタブを使用して、どのデバッガー機能がほとんどのリソースを消費しているかを調べます。オーバーヘッド情報の...
![](https://resources.jetbrains.com/help/img/idea/2024.1/debug_overview.png)
デバッグツールウィンドウ
デバッガーセッションを開始すると、デバッグツールウィンドウが表示されます。このウィンドウを使用して、デバッガーセッションを制御し、プログラムデータ(フレーム、スレッド、変数など)を表示して分析し、さまざまなデバッガーアクションを実行します。これは、デバッグツールウィンドウの概要です。ツールウィンドウの使用に関する一般的な手順については、ツールウィンドウを参照してください。ツールウィンドウのタブを切り替えるには、とを押します。セッション:使用可能なデバッグセッションは、デバッグツールウィンド