IntelliJ IDEA 2019.3ヘルプ

ブレークポイント

ブレークポイントは、特定のポイントでプログラムの実行を一時停止する特別なマーカーです。これにより、プログラムの状態と動作を調べることができます。ブレークポイントは、単純なもの(コードのある行に到達したときにプログラムを中断するなど)でも、より複雑なロジック( 追加条件のチェック、ログメッセージの書き込みなど)を伴うものでもかまいません。

設定すると、一時的なブレークポイントを除いて、明示的に削除するまで、プロジェクトにブレークポイントが残ります。

ブレークポイントの種類

ブレークポイントには4つのタイプがあります。

  • 行ブレークポイント :ブレークポイントが設定されたコードの行に到達すると、プログラムを中断します。このタイプのブレークポイントは、実行可能なコード行に設定できます。

  • メソッドブレークポイント :指定されたメソッドまたはその実装の1つを開始または終了するとプログラムを中断し、メソッドの開始/終了条件を確認できるようにします。

  • field watchpoints :指定されたフィールドが読み書きされると、プログラムを中断します。これにより、特定のインスタンス変数との相互作用に対応できます。例:複雑なプロセスの終了時に、フィールドの1つの値が明らかに間違っている場合、フィールドウォッチポイントを設定すると、障害の原因を特定できる場合があります。

  • 例外ブレークポイントThrowable またはそのサブクラスがスローされたときにプログラムを中断します。これらは例外条件にグローバルに適用され、特定のソースコード参照を必要としません。

ブレークポイントのステータス

ブレークポイントには、次のステータスがあります。

状況

説明

検証済み

デバッガーセッションを開始すると、デバッガーは、ブレークポイントでプログラムを中断することが技術的に可能かどうかを確認します。はいの場合、デバッガーはブレークポイントを確認済みとしてマークします。

警告

ブレークポイントでプログラムを中断することが技術的に可能な場合でも、それに関連する課題がある場合、デバッガーは警告を表示します。これは、たとえば、メソッドの実装の1つでプログラムを中断できない場合に発生する可能性があります。

無効

ブレークポイントでプログラムを中断することが技術的に不可能な場合、デバッガーはそれを無効としてマークします。これの最も一般的な原因は、行に実行可能コードがないことです。

非アクティブ/依存

ブレークポイントは、別のブレークポイントがヒットするまで無効に設定されている場合、非アクティブ/依存としてマークされますが、これはまだ発生していません。

ミュート

すべてのブレークポイントはミュートされているため、一時的に非アクティブです。

使用不可

それはされているため、このブレークポイントが一時的にアクティブで無効

中断しない

中断ポリシーは、このブレークポイントに設定されているため、ヒットしても実行が中断されません。

ブレークポイント・アイコン

タイプステータスに応じて、ブレークポイントは次のアイコンでマークされます。

  • inactive/dependent field watchpoint 非アクティブ/依存フィールドウォッチポイント

  • inactive/dependent line breakpoint 非アクティブ/依存行ブレークポイント

  • inactive/dependent method breakpoint 非アクティブ/依存メソッドブレークポイント

  • disabled line breakpoint は行ブレークポイントを無効にしました

  • disabled exception breakpoint は例外ブレークポイントを無効にしました

  • disabled field watchpoint 無効フィールドウォッチポイント

  • disabled method breakpoint はメソッドブレークポイントを無効にしました

  • exception breakpoint 例外ブレークポイント

  • field watchpoint フィールドウォッチポイント

  • invalid breakpoint 無効なブレークポイント

  • method breakpoint メソッドブレークポイント

  • muted line breakpoint ミュート行ブレークポイント

  • muted inactive/dependent field watchpoint は非アクティブ/依存フィールドウォッチポイントをミュートしました

  • muted inactive/dependent line breakpoint が非アクティブ/依存行ブレークポイントをミュートしました

  • muted inactive/dependent method breakpoint は非アクティブ/依存メソッドのブレークポイントをミュートしました

  • muted disabled line breakpoint ミュートの無効な行ブレークポイント

  • muted disabled field watchpoint ミュート無効フィールドウォッチポイント

  • muted disabled method breakpoint ミュート無効メソッドブレークポイント

  • muted field watchpoint ミュートフィールドウォッチポイント

  • muted method breakpoint ミュートメソッドブレークポイント

  • non-suspending line breakpoint 非中断行ブレークポイント

  • non-suspending field watchpoint ノンサスペンドフィールドウォッチポイント

  • non-suspending method breakpoint 非中断メソッドブレークポイント

  • line breakpoint 行ブレークポイント

  • verified line breakpoint が確認した行ブレークポイント

  • verified field watchpoint 検証済みフィールドウォッチポイント

  • verified method breakpoint 検証済みメソッドブレークポイント

  • verified non-suspending line breakpoint が非中断行ブレークポイントを検証しました

  • verified non-suspending field watchpoint が非一時停止フィールドウォッチポイントを確認しました

  • verified non-suspending method breakpoint が非中断メソッドブレークポイントを検証しました

ブレークポイントの設定

行ブレークポイントを設定する

  • ブレークポイントを設定するコードの実行可能な行でガターをクリックします。または、行にキャレットを置き、Ctrl+F8を押します。

    Line breakpoint

行にラムダ式が含まれている場合、通常の行ブレークポイントを設定するか、ラムダが呼び出されたときにのみプログラムを中断するかを選択できます。

A popup lets you select between a regular line breakpoint and a lambda breakpoint

メソッドブレークポイントを設定する

  • メソッドが宣言されている行の側ガターをクリックします。または、行にキャレットを置き、Ctrl+F8を押します。

    Method breakpoint

あるクラスのデフォルトコンストラクターが呼び出されたときにプログラムを中断するには、クラスが宣言されている行のガターをクリックするか、行にキャレットを置いて Ctrl+F8を押します。

A breakpoint set on a default constructor

フィールドウォッチポイントを設定する

  • フィールドが宣言されている行の側ガターをクリックします。または、行にキャレットを置き、Ctrl+F8を押します。

    Field watchpoint

例外ブレークポイントを設定する

  1. ブレークポイントの表示 View Breakpoints button をクリックするか、Ctrl+Shift+F8を押します。

  2. 例外のタイプに応じて:

    • Throwable のインスタンスがスローされたときにプログラムを中断したい場合は、Javaの例外すべての例外を確認してください。

    • 特定の例外またはそのサブクラスがスローされたときにプログラムを中断する場合は、ダイアログの左上隅にある追加 Alt+Insert をクリックして、例外の名前を入力します。

ブレークポイントの管理

ブレークポイントを除去します

  • 例外以外のブレークポイントの場合:ガターのブレークポイントをクリックします。

  • すべてのブレークポイントの場合:メインメニューから実行 | ブレークポイントの表示 Ctrl+Shift+F8を選択し、ブレークポイントを選択して、除去 Deleteをクリックします。

ブレークポイントを誤って削除してパラメーターを失うことを避けるために、エディターにドラッグするか、中央のマウスボタンをクリックして、ブレークポイントを削除することを選択できます。設定/環境設定 | ビルド、実行、デプロイ | デバッガーに移動してエディターにドラッグまたはマウスの中ボタンをクリックを選択します。ブレークポイントをクリックすると、その状態(有効/無効)が切り替わります。

ブレークポイントをミュート

ブレークポイントでしばらく停止する必要がない場合は、ミュートできます。これにより、デバッガセッションを移動せずに通常のプログラム操作を再開できます。その後、ブレークポイントのミュートを解除してデバッグを続行できます。

  • デバッグツールウィンドウのツールバーのブレークポイントをミュートボタン Mute Breakpoints button をクリックします。

ブレークポイントを使用可能/使用不可にする

ブレークポイントを削除すると、その内部構成は失われます。パラメータを失うことなく、個々のブレークポイントを一時的にオフにするには、無効にすることができます。

  • 非例外ブレークポイントの場合:それを右クリックして、必要に応じて有効オプションを設定します。ブレークポイントの削除が割り当てられていない場合は、マウスの中ボタンで切り替えることもできます。

  • すべてのブレークポイントの場合:ブレークポイントの表示 Ctrl+Shift+F8 をクリックして、リストのブレークポイントをオン/オフにします。

ブレークポイントの移動/コピー

  • ブレークポイントを移動するには、それを別の行にドラッグします。

  • ブレークポイントをコピーするには、Ctrl を押したまま、ブレークポイントを別の行にドラッグします。これにより、宛先に同じパラメーターを持つブレークポイントが作成されます。

ブレークポイントのプロパティーを構成する

ブレークポイントのタイプに応じて、特定のニーズに合わせて操作を調整できる追加のプロパティーを構成できます。最も使用されるオプションは、インテンションを介して利用できます。

  • ブレークポイントインテンションにアクセスするには、ブレークポイントのある行にキャレットを置き、Alt+Enterを押します。このオプションは、基本的なブレークポイントプロパティーをすばやく設定する必要がある場合に使用します。

  • プロパティーの完全なリストにアクセスするには、ブレークポイントを右クリックしてさらにをクリックするか、Ctrl+Shift+F8を押します。このオプションは、すべてのブレークポイントの鳥瞰図とその構成の完全な制御に使用します。

インテンションリファレンス

インテンション

説明

ブレークポイントの除去

選択した行のブレークポイントを削除する

ブレークポイントを使用不可にする

選択した行でブレークポイントを無効にする

ブレークポイントの編集

最も使用されているブレークポイントプロパティーでダイアログを開きます。その他のプロパティーについては、さらにをクリックするか、Ctrl+Shift+F8を押してください。

クラスでのみ停止

クラスフィルターを適用して、現在実行されているクラスのすべての子孫を除外する

クラスに立ち寄らないでください

クラスフィルターを適用して、現在実行されているクラスを除外する

現在のオブジェクトでのみ停止

インスタンスフィルターを適用して、現在実行されているインスタンスを除くすべてのインスタンスを除外します。このアクションは、非静的コンテキストでのみ使用可能です。

から呼び出された場合のみ停止

呼び出し元フィルターを適用して、スタック内の前のフレームに対応するメソッドを除くすべてのメソッドを除外する

から呼び出された場合は停止しないでください

呼び出し元フィルターを適用して、スタック内の前のフレームに対応するメソッドを除外する

ブレークポイントのプロパティー

使用可能

プロジェクトから削除せずに一時的にブレークポイントを無効にするには、オフにします。無効なブレークポイントは、ステップ実行中にスキップされます。

(完全に削除するのではなく)クリック時にブレークポイントを有効/無効にするようにIntelliJ IDEAを構成できます。これを行うには、設定/環境設定 | ビルド、実行、デプロイ | デバッガーに移動し、ブレークポイントの除去オプションをエディターにドラッグまたはマウスの中ボタンをクリックに設定します。

中断

ブレークポイントに達したときにプログラムの実行を一時停止するかどうかを指定します。

非中断ブレークポイントは、プログラムを一時停止せずに式を記録する必要がある場合(たとえば、メソッドが呼び出された回数を知る必要がある場合)、またはヒット時に依存ブレークポイントを有効にするマスターブレークポイントを作成する必要がある場合に便利です。

プログラムの実行を一時停止するブレークポイントには、次のポリシーを使用できます。

  • すべて : スレッドのいずれかがブレークポイントに達すると、すべてのスレッドが中断されます

  • スレッド : ブレークポイントにヒットしたスレッドのみが中断されます。

条件

ブレークポイントにヒットするたびにチェックされる条件を指定します。条件が trueと評価された場合、選択されたアクションが実行されます。それ以外の場合、ブレークポイントは無視されます。

式の結果は、returnステートメントから取得されます。returnステートメントがない場合、結果はコードの最後の行から取得されます。

条件の本文では、次を使用できます。

  • 宣言、ループ、匿名クラスなどを含む複数のステートメント

  • this (非静的コンテキスト内)、たとえば、現在の例外を参照するため: !(this instanceof IOException)

  • ラベルを使用して、式に追跡インスタンスを含めるか、ブールフィールドをチェックします: trackedObject_DebugLabel.isComplete()

式を評価するときは、プログラムの動作や結果に影響を与える可能性があるため、可能性のある副作用に注意してください。

ログ・オプション

ヒットした場合、次のいずれかをコンソールに記録するようにブレークポイントを設定できます。

  • 「ブレークポイントヒット」メッセージ : Breakpoint reached at ocean.Whale.main(Whale.java:5)のようなログメッセージ

  • スタック・トレース : 現在のフレームのスタックトレース。これは、プログラムの実行を中断することなく、このポイントに至ったパスを確認する場合に役立ちます。

  • 評価して記録 : 任意の式の結果。式の結果は、returnステートメントから取得されます。returnステートメントがない場合、結果はコードの最後の行から取得されます(式である必要はありません。リテラルも機能します)。これを使用して、カスタムメッセージを作成したり、プログラムの実行中に一部の値を追跡したりできます。

    式を評価するときは、プログラムの動作や結果に影響を与える可能性があるため、可能性のある副作用に注意してください。

一度ヒットしたら除去する

ブレークポイントを1回ヒットした後、プロジェクトから削除するかどうかを指定します。

次のブレークポイントに到達するまで無効にする

次のブレークポイントに到達するまで無効にするボックスでブレークポイントを選択すると、現在のブレークポイントのトリガーとして機能します。これにより、指定したブレークポイントがヒットするまで、現在のブレークポイントが無効になります。

これが発生した後に再び無効にするか、有効のままにするかを選択することもできます。

このオプションは、特定の条件下または特定のアクションの後でのみプログラムを中断する必要がある場合に役立ちます。この場合、通常、トリガーブレークポイントはプログラムの実行を停止するために必要ではなく、non-suspendingになります。

フィルター

IntelliJ IDEAデバッガーを使用すると、クラス、インスタンス、および呼び出し元のメソッドをフィルターで除外して、ブレークポイント操作を微調整し、有用な場合にのみプログラムを中断できます。

次のタイプのフィルターを使用できます。

  • キャッチ・クラス・フィルター : 指定されたクラスの1つで例外がキャッチされる場合にのみ、プログラムを中断できます。例外ブレークポイントでのみ使用できます。

  • インスタンス・フィルター : ブレークポイント操作を特定のオブジェクトインスタンスに制限します。このタイプのフィルターは、非静的コンテキストでのみ有効です。

  • クラス・フィルター : ブレークポイント操作を特定のクラス(および現在のクラスのメンバーをオーバーライドまたは非表示にしないサブクラス)に制限します。

  • 発信者フィルタ : 現在のメソッドの呼び出し元に応じて、ブレークポイント操作を制限します。特定のメソッドから現在のメソッドが呼び出される(または呼び出されない)場合にのみ、ブレークポイントで停止する必要がある場合に選択します。

ダイアログを使用して、フィルターを設定したり、テキスト形式で定義したりできます。テキスト形式の場合、次の構文を使用します。

  • クラスとメソッドは、完全修飾名を使用して指定されます。クラス名でフィルターが指定されている場合、フィルターはクラス自体と、継承を介してそのメンバーを使用するすべてのサブクラスを指します。

  • * ワイルドカードでパターンを使用して、クラス/メソッドのグループを定義できます。パターンで指定されたフィルターは、完全修飾名がこのパターンに一致するクラス/メソッドを指します。

  • オブジェクトインスタンスは、インスタンスIDを使用して指定されます

  • クラス名、呼び出し元メソッド、パターン、およびインスタンスIDはスペースを使用して区切られます

  • クラスまたは呼び出し元メソッドを除外するには、名前の前に - を入力する

  • 呼び出し元フィルターでは、パラメーターと戻り値の型に記述子を使用します: たとえば: mypackage.MyObject.addString(Ljava/lang/String;)V

フィルターの例:

-java.* -sun.*

java および sun パッケージ内のコードを無視する

-package1.Class1.method1([Ljava/lang/String;)Ljava/util/List;

package1.Class1method1 からの呼び出しを除外する発信者フィルター: List method1 (String[] input)

package1.Class1 *s2 -package3.Class3

package1.Class1 および完全修飾名が s2で終わるクラスのコードにブレークポイントを適用します: package3.Class3 クラスのコードを無視する

通過数

特定の回数ヒットした後にのみブレークポイントが機能するかどうかを指定します。これは、複数回呼び出されるループまたはメソッドのデバッグに役立ちます。

カウントが完了すると、カウントがリセットされ、新たに開始されます。これは、パスカウントが 10に設定されている場合、ブレークポイントはヒットする10回ごとに機能することを意味します。

通過数条件の両方が設定されている場合、IntelliJ IDEAは最初に条件を満たし、次に2つの設定間の競合を避けるためにパスカウントをチェックします。

フィールドアクセス/変更

  • フィールド・アクセス-フィールドの読み取り時にウォッチポイントを機能させる場合に選択します。

  • フィールド変更 –フィールドへの書き込み時にウォッチポイントを機能させる場合に選択します。

エミュレート

このオプションを有効にすると、IntelliJ IDEAは、より遅い真のメソッドブレークポイントを使用する代わりに、最初/最後のステートメントに行ブレークポイントの組み合わせを設定します。エミュレートされたメソッドブレークポイントにより、デバッグのパフォーマンスが向上します。このため、デフォルトで使用されます。

リモートコードをデバッグする場合、または行番号情報のないネイティブメソッドまたはクラスにブレークポイントを設定する必要がある場合にのみ、このオプションを無効にすることをお勧めします。

メソッドの入り口/出口

  • メソッド入り口-メソッドまたはその子孫が入力されるたびにブレークポイントを機能させる場合に選択します。

  • メソッド出口-メソッドまたはその子孫が終了するたびにブレークポイントを機能させる場合に選択します。

キャッチ/キャッチされない例外

  • キャッチされた例外 –指定された例外がキャッチされたときにブレークポイントを機能させる場合に選択します。

  • キャッチされない例外 –指定された例外がキャッチされなかったときにブレークポイントを機能させる場合に選択します。これにより、プログラムの状態を調べて、未処理の例外が原因でプログラムがクラッシュする前に原因を検出できます。

生産性のヒント

ブレークポイントの説明を追加する
プロジェクトに多数のブレークポイントがある場合、検索を簡単にするためにブレークポイントに説明を追加できます。ブレークポイントダイアログ Ctrl+Shift+F8 でブレークポイントを右クリックし、メニューから説明の編集を選択します。ブレークポイントの名前の入力を開始すると、フォーカスが取得されます。
ブレークポイントのグループ化
たとえば、特定の問題のブレークポイントをマークアウトする必要がある場合、ブレークポイントをグループに編成できます。ブレークポイントダイアログ Ctrl+Shift+F8で、グループに配置するブレークポイントを選択し、メニューからグループへ移動を選択します。
ラムダ式とメソッド参照
JVMの設計により、ラムダ式とは異なり、メソッド参照はスタックトレースに意味のある情報を提供しません。さらに、メソッド参照にブレークポイントを設定することはできません。メソッド参照が重要な場合にトレーサビリティを低下させる場合は、代わりにラムダの使用を検討してください。
致命的なエラーの原因の診断
例外ブレークポイントは Throwableで機能するため、Error のサブクラスがスローされたときに使用してプログラムを中断することもできます。これは、OutOfMemoryErrorStackOverflowErrorなどのエラーの原因を調査できます。それらに例外ブレークポイントを設定すると、クラッシュする前にプログラムで何が起こったのかを調べることができます。
並行性の課題についてプログラムをテストする
マルチスレッドプログラムが同時実行性に関して堅牢であるかどうかを確認する良い方法は、ヒット時に1つのスレッドのみを一時停止するブレークポイントを使用することです。単一のスレッドを停止すると、アプリケーションの設計上の問題が明らかになる場合がありますが、それ以外の場合は明らかではありません。
「printf」デバッグにブレークポイントを使用する
コードにprintステートメントを挿入する代わりに、中断しないロギングブレークポイントを使用します。これにより、デバッグログメッセージをより柔軟かつ集中的に処理できます。
最終更新日: 2019年12月2日

関連ページ:

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

ステップは、プログラムの段階的な実行を制御するプロセスです。IntelliJ IDEAは、戦略に応じて使用される一連のステップアクションを提供します(たとえば、次の行に直接移動するか、途中で呼び出されたメソッドを入力する必要があるかなど)。ステップボタンは、デバッグツールウィンドウのツールバーにあり...

中断されたプログラムを調べる

デバッガーセッションが開始されると、デバッグツールウィンドウが表示され、次のいずれかが発生するまでプログラムが正常に実行されます。ブレークポイントにヒット、手動でプログラムを一時停止する、その後、プログラムは中断され、現在の状態を調べたり、実行を制御したり、実行時にさまざまなシナリオをテストしたりで...

デバッグ

IntelliJ IDEAは、Javaコード用のデバッガーを提供します。インストール/有効化されたプラグインに応じて、他の言語で記述されたコードをデバッグすることもできます。デバッグセッション中に、デバッガをアタッチしてプログラムを起動します。デバッガの目的は、プログラムの実行を妨害し、内部で何が起...

デバッガセッションの開始

デバッガーセッションの開始は、通常モードでのプログラムと非常に似ています。デバッガーはバックグラウンドで接続されているため、デバッガーセッションを開始するために特別な設定を行う必要はありません。IntelliJ IDEAからプログラムを実行できる場合は、同じ構成を使用してプログラムをデバッグすること...