ブレークポイント
ブレークポイントは、特定のポイントでプログラムの実行を一時停止する特別なマーカーです。これにより、プログラムの状態と動作を調べることができます。ブレークポイントは、単純なもの(コードのある行に到達したときにプログラムを中断するなど)でも、より複雑なロジック( 追加条件のチェック、ログメッセージの書き込みなど)を伴うものでもかまいません。
設定すると、一時的なブレークポイントを除いて、明示的に削除するまで、プロジェクトにブレークポイントが残ります。
ブレークポイントの種類
ブレークポイントには4つのタイプがあります。
行ブレークポイント :ブレークポイントが設定されたコードの行に到達すると、プログラムを中断します。このタイプのブレークポイントは、実行可能なコード行に設定できます。
メソッドブレークポイント :指定されたメソッドまたはその実装の1つを開始または終了するとプログラムを中断し、メソッドの開始/終了条件を確認できるようにします。
field watchpoints :指定されたフィールドが読み書きされると、プログラムを中断します。これにより、特定のインスタンス変数との相互作用に対応できます。例:複雑なプロセスの終了時に、フィールドの1つの値が明らかに間違っている場合、フィールドウォッチポイントを設定すると、障害の原因を特定できる場合があります。
例外ブレークポイント :
Throwable
またはそのサブクラスがスローされたときにプログラムを中断します。これらは例外条件にグローバルに適用され、特定のソースコード参照を必要としません。
ブレークポイントのステータス
ブレークポイントには、次のステータスがあります。
状況 | 説明 |
---|---|
検証済み | デバッガーセッションを開始すると、デバッガーは、ブレークポイントでプログラムを中断することが技術的に可能かどうかを確認します。はいの場合、デバッガーはブレークポイントを確認済みとしてマークします。 |
警告 | ブレークポイントでプログラムを中断することが技術的に可能な場合でも、それに関連する課題がある場合、デバッガーは警告を表示します。これは、たとえば、メソッドの実装の1つでプログラムを中断できない場合に発生する可能性があります。 |
無効 | ブレークポイントでプログラムを中断することが技術的に不可能な場合、デバッガーはそれを無効としてマークします。これの最も一般的な原因は、行に実行可能コードがないことです。 |
非アクティブ/依存 | ブレークポイントは、別のブレークポイントがヒットするまで無効に設定されている場合、非アクティブ/依存としてマークされますが、これはまだ発生していません。 |
ミュート | すべてのブレークポイントはミュートされているため、一時的に非アクティブです。 |
使用不可 | それはされているため、このブレークポイントが一時的にアクティブで無効。 |
中断しない | 中断ポリシーは、このブレークポイントに設定されているため、ヒットしても実行が中断されません。 |
ブレークポイント・アイコン
タイプとステータスに応じて、ブレークポイントは次のアイコンでマークされます。
非アクティブ/依存フィールドウォッチポイント
非アクティブ/依存行ブレークポイント
非アクティブ/依存メソッドブレークポイント
は行ブレークポイントを無効にしました
は例外ブレークポイントを無効にしました
無効フィールドウォッチポイント
はメソッドブレークポイントを無効にしました
例外ブレークポイント
フィールドウォッチポイント
無効なブレークポイント
メソッドブレークポイント
ミュート行ブレークポイント
は非アクティブ/依存フィールドウォッチポイントをミュートしました
が非アクティブ/依存行ブレークポイントをミュートしました
は非アクティブ/依存メソッドのブレークポイントをミュートしました
ミュートの無効な行ブレークポイント
ミュート無効フィールドウォッチポイント
ミュート無効メソッドブレークポイント
ミュートフィールドウォッチポイント
ミュートメソッドブレークポイント
非中断行ブレークポイント
ノンサスペンドフィールドウォッチポイント
非中断メソッドブレークポイント
行ブレークポイント
が確認した行ブレークポイント
検証済みフィールドウォッチポイント
検証済みメソッドブレークポイント
が非中断行ブレークポイントを検証しました
が非一時停止フィールドウォッチポイントを確認しました
が非中断メソッドブレークポイントを検証しました
ブレークポイントの設定
行ブレークポイントを設定する
ブレークポイントを設定するコードの実行可能な行でガターをクリックします。または、行にキャレットを置き、Ctrl+F8を押します。
行にラムダ式が含まれている場合、通常の行ブレークポイントを設定するか、ラムダが呼び出されたときにのみプログラムを中断するかを選択できます。

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

フィールドウォッチポイントを設定する
フィールドが宣言されている行の側ガターをクリックします。または、行にキャレットを置き、Ctrl+F8を押します。
例外ブレークポイントを設定する
ブレークポイントの表示
をクリックするか、Ctrl+Shift+F8を押します。
例外のタイプに応じて:
Throwable
のインスタンスがスローされたときにプログラムを中断したい場合は、Javaの例外のすべての例外を確認してください。特定の例外またはそのサブクラスがスローされたときにプログラムを中断する場合は、ダイアログの左上隅にある追加 Alt+Insert をクリックして、例外の名前を入力します。
ブレークポイントの管理
ブレークポイントを除去します
例外以外のブレークポイントの場合:ガターのブレークポイントをクリックします。
すべてのブレークポイントの場合:メインメニューから除去 Deleteをクリックします。
Ctrl+Shift+F8を選択し、ブレークポイントを選択して、
ブレークポイントを誤って削除してパラメーターを失うことを避けるために、エディターにドラッグするか、中央のマウスボタンをクリックして、ブレークポイントを削除することを選択できます。エディターにドラッグまたはマウスの中ボタンをクリックを選択します。ブレークポイントをクリックすると、その状態(有効/無効)が切り替わります。
に移動してブレークポイントをミュート
ブレークポイントでしばらく停止する必要がない場合は、ミュートできます。これにより、デバッガセッションを移動せずに通常のプログラム操作を再開できます。その後、ブレークポイントのミュートを解除してデバッグを続行できます。
デバッグツールウィンドウのツールバーのブレークポイントをミュートボタン
をクリックします。
ブレークポイントを使用可能/使用不可にする
ブレークポイントを削除すると、その内部構成は失われます。パラメータを失うことなく、個々のブレークポイントを一時的にオフにするには、無効にすることができます。
非例外ブレークポイントの場合:それを右クリックして、必要に応じて有効オプションを設定します。ブレークポイントの削除が割り当てられていない場合は、マウスの中ボタンで切り替えることもできます。
すべてのブレークポイントの場合:ブレークポイントの表示 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.* | |
-package1.Class1.method1([Ljava/lang/String;)Ljava/util/List; | |
package1.Class1 *s2 -package3.Class3 | |
通過数
特定の回数ヒットした後にのみブレークポイントが機能するかどうかを指定します。これは、複数回呼び出されるループまたはメソッドのデバッグに役立ちます。
カウントが完了すると、カウントがリセットされ、新たに開始されます。これは、パスカウントが 10
に設定されている場合、ブレークポイントはヒットする10回ごとに機能することを意味します。
通過数と条件の両方が設定されている場合、IntelliJ IDEAは最初に条件を満たし、次に2つの設定間の競合を避けるためにパスカウントをチェックします。
フィールドアクセス/変更
フィールド・アクセス-フィールドの読み取り時にウォッチポイントを機能させる場合に選択します。
フィールド変更 –フィールドへの書き込み時にウォッチポイントを機能させる場合に選択します。
エミュレート
このオプションを有効にすると、IntelliJ IDEAは、より遅い真のメソッドブレークポイントを使用する代わりに、最初/最後のステートメントに行ブレークポイントの組み合わせを設定します。エミュレートされたメソッドブレークポイントにより、デバッグのパフォーマンスが向上します。このため、デフォルトで使用されます。
リモートコードをデバッグする場合、または行番号情報のないネイティブメソッドまたはクラスにブレークポイントを設定する必要がある場合にのみ、このオプションを無効にすることをお勧めします。
メソッドの入り口/出口
メソッド入り口-メソッドまたはその子孫が入力されるたびにブレークポイントを機能させる場合に選択します。
メソッド出口-メソッドまたはその子孫が終了するたびにブレークポイントを機能させる場合に選択します。
キャッチ/キャッチされない例外
キャッチされた例外 –指定された例外がキャッチされたときにブレークポイントを機能させる場合に選択します。
キャッチされない例外 –指定された例外がキャッチされなかったときにブレークポイントを機能させる場合に選択します。これにより、プログラムの状態を調べて、未処理の例外が原因でプログラムがクラッシュする前に原因を検出できます。
生産性のヒント
- ブレークポイントの説明を追加する
- プロジェクトに多数のブレークポイントがある場合、検索を簡単にするためにブレークポイントに説明を追加できます。ブレークポイントダイアログ Ctrl+Shift+F8 でブレークポイントを右クリックし、メニューから説明の編集を選択します。ブレークポイントの名前の入力を開始すると、フォーカスが取得されます。
- ブレークポイントのグループ化
- たとえば、特定の問題のブレークポイントをマークアウトする必要がある場合、ブレークポイントをグループに編成できます。ブレークポイントダイアログ Ctrl+Shift+F8で、グループに配置するブレークポイントを選択し、メニューから を選択します。
- ラムダ式とメソッド参照
- JVMの設計により、ラムダ式とは異なり、メソッド参照はスタックトレースに意味のある情報を提供しません。さらに、メソッド参照にブレークポイントを設定することはできません。メソッド参照が重要な場合にトレーサビリティを低下させる場合は、代わりにラムダの使用を検討してください。
- 致命的なエラーの原因の診断
- 例外ブレークポイントは
Throwable
で機能するため、Error
のサブクラスがスローされたときに使用してプログラムを中断することもできます。これは、OutOfMemoryError
やStackOverflowError
などのエラーの原因を調査できます。それらに例外ブレークポイントを設定すると、クラッシュする前にプログラムで何が起こったのかを調べることができます。 - 並行性の課題についてプログラムをテストする
- マルチスレッドプログラムが同時実行性に関して堅牢であるかどうかを確認する良い方法は、ヒット時に1つのスレッドのみを一時停止するブレークポイントを使用することです。単一のスレッドを停止すると、アプリケーションの設計上の問題が明らかになる場合がありますが、それ以外の場合は明らかではありません。
- 「printf」デバッグにブレークポイントを使用する
- コードにprintステートメントを挿入する代わりに、中断しないロギングブレークポイントを使用します。これにより、デバッグログメッセージをより柔軟かつ集中的に処理できます。
関連ページ:

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

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

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

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