ブレークポイント
ブレークポイントは、特定のポイントでプログラムの実行を一時停止する特別なマーカーです。 これにより、プログラムの状態と動作を調べることができます。 ブレークポイントは、たとえば、特定のコード行に到達したときにプログラムを一時停止するなどの単純なものから、 追加の条件をチェックしたり、 ログに書き込んだりするなどのより複雑なロジックを含むものまであります。
ブレークポイントは、一度設定すると、 一時的なブレークポイントを除き、明示的に削除するまでプロジェクト内に残ります。
ブレークポイントの種類
IntelliJ IDEA では、次のタイプのブレークポイントを使用できます。
行ブレークポイント: ブレークポイントが設定されたコード行に到達したらプログラムを中断します。 このタイプのブレークポイントは、実行可能なコード行に設定できます。
メソッドのブレークポイント: 指定されたメソッドまたはその実装の 1 つを開始または終了するとプログラムを中断し、メソッドの開始 / 終了条件を確認できるようにします。
フィールドウォッチポイント: 指定されたフィールドの読み取りまたは書き込みが行われたときにプログラムを中断します。 これにより、特定のインスタンス変数との相互作用に対応できます。 例: 複雑なプロセスの終了時に、フィールドの 1 つの値が明らかに間違っている場合、フィールドウォッチポイントを設定すると、障害の原因を特定できる場合があります。
例外のブレークポイント:
Throwableまたはそのサブクラスがスローされたときにプログラムを一時停止します。 これらは例外条件にグローバルに適用され、特定のソースコード参照を必要としません。 スタックトレースとは異なり、例外でアプリケーションを一時停止すると、周囲のコンテキストまたはデータがまだ利用可能な間に調べることができます。
ブレークポイントの設定
行ブレークポイントを設定する
ブレークポイントを設定するコードの実行可能な行でガターをクリックします。 または、行にキャレットを置き、 Ctrl+F8 を押します。

行内の特定のラムダまたは if-return ステートメントをターゲットにするには、これらのステートメントの近くに表示されるブレークポイントアイコンを使用します。

Java ストリーム操作の場合のように、デバッグする意味のある行上のコードがラムダだけであるシナリオでは、IntelliJ IDEA は行全体ではなくこのラムダにブレークポイントを自動的に設定します。
一時的な行ブレークポイントを設定するには、 Ctrl+Alt+Shift+F8 を押します。 または、 Alt を押したままガターをクリックします。 このブレークポイントは、ヒットするとすぐにプロジェクトから削除されます。
メソッドブレークポイントを設定する
メソッドが宣言されている行のガターをクリックします。 または、メソッド宣言にキャレットを置いて、 Ctrl+F8 を押します。

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

複数のクラスまたはメソッドをターゲットにするには、メインメニューから を選択し、 追加 Alt+Insert をクリックして、 メソッドブレークポイント を選択し、クラスとメソッドを指定します。
*を使用して、識別子の先頭、末尾、全体を一致させます。
構文例:
クラス
メソッド
結果
*printすべてのクラスの
print()メソッド (パラメーターリストを使用)Printer*PrinterクラスのメソッドPrinterset*Printerクラスのすべての setter**すべてのメソッド (たとえば、起動直後にアプリケーションを一時停止したい場合)
フィールドウォッチポイントを設定する
フィールドが宣言されている行のガターをクリックします。 または、行にキャレットを置き、 Ctrl+F8 を押します。

例外ブレークポイントを設定する
Ctrl+Shift+F8 を押すか、メインメニューから を選択します。 次に、例外の種類に応じて、次の操作を行います。
コンソールに例外のスタックトレースがある場合は、例外の名前の近くにある ブレークポイントの作成 ボタンを使用して、この例外のブレークポイントを設定できます。

エディターで例外を宣言または使用しているときに、コンテキストメニュー Alt+Enter を使用してこの例外のブレークポイントを設定できます。

ブレークポイントの管理
ブレークポイントを除去する
例外以外のブレークポイントの場合: ガターのブレークポイントをクリックします。
すべてのブレークポイントの場合: メインメニューの Ctrl+Shift+F8 に移動し、ブレークポイントを選択して、 除去 をクリックするか、 Delete を押します。
誤ってブレークポイントを削除してそのパラメーターを失うのを防ぐために、エディターにドラッグするか、マウスの中央ボタンをクリックして、ブレークポイントを削除することを選択できます。 これを行うには、 に移動して エディターにドラッグするか、マウスの中ボタンでクリックする を選択します。 ブレークポイントをクリックすると、それが 有効または無効になります。
ブレークポイントのミュート
ブレークポイントでしばらく停止する必要がない場合は、 ミュートできます。 これにより、デバッガーセッションを移動することなく、通常のプログラム操作を再開できます。 その後、ブレークポイントのミュートを解除して、デバッグを続行できます。
デバッグ ツールウィンドウのツールバーの ブレークポイントのミュート ボタン
をクリックします。
ブレークポイントを使用可能 / 使用不可にする
ブレークポイントを削除すると、その 内部構成は失われます。 パラメーターを失うことなく個々のブレークポイントを一時的にオフにするには、 無効にすることができます。
例外以外のブレークポイントの場合: 右クリックし、必要に応じて 有効 オプションを設定します。 または、 Alt キーを押しながらブレークポイントをクリックするか、マウスの中ボタンをクリックすることでも設定できます。 マウスの中ボタンにブレークポイントの削除が 割り当てられていないことを確認してください。
すべてのブレークポイントの場合: 実行 | ブレークポイントの表示 Ctrl+Shift+F8 をクリックして、リストのブレークポイントをオン / オフにします。
ブレークポイントの移動 / コピー
ブレークポイントを移動するには、それを別の行にドラッグします。
ブレークポイントをコピーするには、 Ctrl を押したまま、ブレークポイントを別の行にドラッグします。 これにより、宛先に同じパラメーターを持つブレークポイントが作成されます。
設定されたすべてのブレークポイントを表示
ブックマークツールウィンドウで、すべてのブレークポイントのリストを表示できます。 ブレークポイントは、コード内に配置すると、ツールウィンドウの専用リストに自動的に追加されます。
メインメニューで、 に移動するか、 Alt+2 を押して ブレークポイント リストを展開します。

ブレークポイントのグループ化
たとえば、特定の問題に対してブレークポイントをマークアウトする必要がある場合は、ブレークポイントをグループにまとめることができます。
ブレークポイント ダイアログ Ctrl+Shift+F8 で、グループに配置するブレークポイントを選択し、メニューから を選択します。
ブレークポイントのプロパティを構成する
ブレークポイントのタイプに応じて、特定のニーズに合わせて操作を調整できる追加のプロパティを構成できます。 最も使用されるオプションは、 インテンションを介して利用できます。
ブレークポイントインテンションにアクセスするには、ブレークポイントのある行にキャレットを置き、 Alt+Enter を押します。 このオプションは、基本的なブレークポイントプロパティをすばやく設定する必要がある場合に使用します。
プロパティの完全なリストにアクセスするには、ブレークポイントを右クリックして 詳細 をクリックするか、 Ctrl+Shift+F8 を押します。
インテンションリファレンス
インテンション | 説明 |
|---|---|
ブレークポイントの除去 | 選択した行のブレークポイントを 削除します。 |
ブレークポイントの無効化 | 選択した行のブレークポイントを 無効にします。 |
ブレークポイントの編集 | 最もよく使用されるブレークポイント プロパティを含むダイアログを開きます。 その他のプロパティについては、 詳細 をクリックするか Ctrl+Shift+F8 を押します。 |
クラスでのみ停止 | クラスフィルターを適用して、現在のクラスから派生したクラスを除外します。 |
クラスに立ち寄らないでください | 現在のクラスを除外する クラスフィルターを適用します。 |
現在のオブジェクト内でのみ停止する | インスタンスフィルターを適用して、現在のインスタンスのみを含め、他のインスタンスをすべて除外します。 このアクションは、非静的メソッドでのみ使用できます。 |
から呼び出された場合のみ停止 | 呼び出し元フィルターを適用して、スタック内の前のフレームに対応するメソッドを除くすべてのメソッドを除外します。 |
から呼び出された場合は停止しないでください | 呼び出し元フィルターを適用して、スタック内の前のフレームに対応するメソッドを除外します。 |
ブレークポイントのプロパティリファレンス
この章では、ブレークポイントで使用できる機能について説明します。
有効
プロジェクトから削除せずに一時的にブレークポイントを無効にするには、チェックボックスをオフにします。 無効化されたブレークポイントは、 ステップ実行中にスキップされます。
IntelliJ IDEA を構成して、ブレークポイントを完全に削除するのではなく、クリック時に有効 / 無効にすることができます。 これを行うには、 に移動し、 ブレークポイントの除去 オプションを エディターにドラッグまたはマウスの中央ボタンをクリック に設定します。
中断
ブレークポイントに達したときにプログラムの実行を一時停止するかどうかを指定します。
非中断ブレークポイントは、プログラムを一時停止せずに何らかの式をログに記録する必要がある場合 (たとえば、メソッドが何回呼び出されたかを知る必要がある場合)、またはヒット時に 依存するブレークポイントを有効にする トリガーブレークポイントを作成する必要がある場合に役立ちます。
プログラムの実行を一時停止するブレークポイントには、次のポリシーを使用できます。
すべて: スレッドのいずれかがブレークポイントに達すると、すべてのスレッドが中断されます。
スレッド: ブレークポイントにヒットしたスレッドのみが中断されます。
ポリシーをデフォルトのポリシーとして使用する場合は、 デフォルトにする ボタンをクリックします。
条件
このオプションは、ブレークポイントがヒットするたびにチェックされる条件を指定するために使用されます。 条件が true と評価された場合、選択されたアクションが実行されます。 それ以外の場合、ブレークポイントは無視されます。
式の結果は、return ステートメントから取得されます。 return ステートメントがない場合、結果はコードの最後の行から取得されます。
条件の本文では、次を使用できます。
宣言、ループ、匿名クラスなどを含む複数のステートメント
this(非静的コンテキスト内)、たとえば、現在の例外を参照するため:!(this.entries.isEmpty())追跡されたインスタンスを式に含めたり、そのブールフィールドをチェックしたりするための ラベル:
trackedObject_DebugLabel.isComplete()
式を評価するときは、プログラムの動作や結果に影響を与える可能性があるため、副作用が発生する可能性があることを必ず認識してください。
ログオプション
ブレークポイントに到達すると、次のログがコンソールに記録されます。
"Breakpoint hit" メッセージ(M):
Breakpoint reached at ocean.Whale.main(Whale.java:5)のようなログメッセージ。スタックトレース(K): 現在のフレームのスタックトレース。 これは、プログラムの実行を中断することなく、このポイントに至ったパスを確認する場合に役立ちます。
評価して記録(E):
"Initializing"やusers.size()などの任意の式の結果。式はアクセス修飾子を無視し、ブレークポイントが設定されている行のコンテキストで評価されます。
式の結果は、return ステートメントから取得されます。 return ステートメントがない場合、結果はコードの最後の行から取得されます。その行は必ずしも式である必要はなく、リテラルでも構いません。 これにより、カスタムメッセージの生成やプログラム実行中の値のトラックが可能です。
式を評価するときは、プログラムの動作や結果に影響を与える可能性があるため、副作用が発生する可能性があることを必ず認識してください。
ログブレークポイントを設定する
(オプション) ログに記録する式がエディター内の目の前にある場合は、それを選択します。
Shift を押したままガターをクリックします。
一度ヒットしたら除去する
ブレークポイントを 1 回ヒットした後、プロジェクトから削除するかどうかを指定します。
次のブレークポイントに到達するまで無効にする
次のブレークポイントに到達するまで無効にする ボックスでブレークポイントを選択すると、現在のブレークポイントのトリガーとして機能します。 これにより、指定したブレークポイントに到達するまで現在のブレークポイントが 無効になります。
これが発生した後に再び無効にするか、有効のままにするかを選択することもできます。
このオプションは、特定の条件下または特定のアクションの後でのみプログラムを中断する必要がある場合に役立ちます。 この場合、通常、トリガーブレークポイントはプログラムの実行を停止するために必要ではなく、 non-suspending になります。
フィルター
IntelliJ IDEA デバッガーを使用すると、クラス、インスタンス、呼び出し元メソッドをフィルターで除外し、必要な場合にのみプログラムを中断することにより、ブレークポイント操作を微調整できます。
次のタイプのフィルターを使用できます。
キャッチクラスフィルター: 指定されたクラスの 1 つで例外がキャッチされる場合にのみ、プログラムを中断できます。 例外ブレークポイントでのみ使用できます。
インスタンスフィルター: 特定のオブジェクトインスタンスでメソッドが呼び出された場合にのみプログラムを一時停止します。 このタイプのフィルターは、非静的コンテキストでのみ有効です。
クラスフィルター: 特定のクラスでのみプログラムを一時停止します。 例外の場合、このフィルターはスローサイトクラスと一致します。
呼び出し元フィルター: 現在のメソッドの呼び出し元に応じてプログラムを一時停止します。 現在のメソッドが特定のメソッドから呼び出された(または呼び出されなかった)場合にのみ、ブレークポイントで停止する必要がある場合に選択します。 フィルターは直接の呼び出し元にのみ適用され、コールスタックの残りの部分はブレークポイントに影響を与えません。
フィルターを設定するには、テキストフィールドの近くにあるボタンをクリックしてダイアログを使用するか、テキスト形式で定義します。 テキスト形式の場合は、次の構文を使用します。
クラスとメソッドは、完全修飾名を使用して指定されます。 クラス名でフィルターが指定されている場合、フィルターはクラス自体と、継承を介してそのメンバーを使用するすべてのサブクラスを指します。
*ワイルドカードで開始または終了するパターンを使用して、クラスまたはメソッドのグループ(*.Fooまたはjava.*など)を定義できます。 パターンを介して指定されたフィルターは、完全修飾名がこのパターンに一致するクラス / メソッドを指します。オブジェクトインスタンスは、インスタンス ID を使用して指定されます。 オブジェクトがスコープ内にある場合、または メモリタブを使用している場合、 変数 タブでオブジェクト ID を見つけることができます。
クラス名、呼び出し元メソッド、パターン、インスタンス ID はスペースで区切られます。
クラスまたは呼び出し元メソッドを除外するには、名前の前に
-を入力します。呼び出し元フィルターでは、パラメーターと戻り値の型に記述子を使用します(例:
mypackage.MyObject.addString(Ljava/lang/String;)V)。 記述子の詳細については、 Oracle の公式ドキュメントを参照してください。
フィルターの例:
|
|
| 次のシグネチャーを持つ |
|
|
通過数
ブレークポイントが特定の回数ヒットした後にのみ機能することを指定します。 これは、長時間実行されるループでアプリケーションを一時停止したり、頻繁に発生するイベントを選択的にログに記録したりするシナリオをデバッグする場合に役立ちます。
カウントが完了すると、リセットされて再び開始されます。 つまり、 通過数 が 10 に設定されている場合、ブレークポイントは 10 回ヒットするごとに機能します。
通過数 と 条件 の両方が設定されている場合、IntelliJ IDEA は最初に条件を満たし、次に 通過数 をチェックします。
フィールドアクセス / 変更
フィールドアクセス | フィールドの読み取り中にウォッチポイントを機能させる場合に選択します。 |
フィールドの変更 | フィールドへの書き込み時にウォッチポイントを機能させる場合に選択します。 |
エミュレート
このオプションを有効にすると、IntelliJ IDEA は、遅い「true」メソッドブレークポイントを使用する代わりに、メソッドの最初と最後のステートメントに行ブレークポイントの組み合わせを設定します。 エミュレートされたメソッドブレークポイントはデバッグパフォーマンスを向上させるため、デフォルトで使用されます。
リモートコードをデバッグしている場合、または行番号情報のないネイティブメソッドまたはクラスにブレークポイントを設定する必要がある場合にのみ、このオプションを無効にすることをお勧めします。
メソッドの入り口 / 出口
メソッド開始 | メソッドまたはその子孫に入った後にブレークポイントを機能させる場合に選択します。 |
メソッド終了 | メソッドまたはその子孫が戻る前にブレークポイントを機能させる場合に選択します。 |
キャッチ / キャッチされない例外
捕捉した例外 | 指定した例外がキャッチされたときにブレークポイントを機能させる場合に選択します。 |
未捕捉の例外 | 指定した例外がキャッチされなかった場合にブレークポイントを機能させる場合に選択します。 これにより、未処理の例外によってプログラムまたはスレッドがクラッシュする前に、プログラムの状態を調べて原因を検出できます。 |
ブレークポイントのステータス
ブレークポイントには、次のステータスがあります。
状況 | 説明 |
|---|---|
検証済み | デバッガーセッションを開始した後、デバッガーはプログラムをブレークポイントで一時停止することが技術的に可能かどうかをチェックします。 はいの場合、デバッガーはブレークポイントを 検証済みとしてマークします。 |
Warning | ブレークポイントでプログラムを一時停止することが技術的に可能ですが、それに関連する問題がある場合、デバッガーはブレークポイントのステータスを 警告に設定します。 これは、たとえば、メソッドの実装の 1 つでプログラムを一時停止することが不可能な場合に発生することがあります。 |
無効 | ブレークポイントでプログラムを一時停止することが技術的に不可能な場合、デバッガーはそれを 無効としてマークします。 これは、その行に実行可能なコードがないためよく発生します。 |
非アクティブ / 依存 | ブレークポイントは、 別のブレークポイントにヒットするまで無効になるように構成されている場合、非アクティブ / 依存としてマークされますが、これはまだ発生していません。 |
ミュート | すべてのブレークポイントは ミュートされているため、一時的に非アクティブです。 |
無効 | それはされているため、このブレークポイントが一時的にアクティブで 無効。 |
中断しない | このブレークポイントには 中断ポリシーが設定されているため、ヒットしたときに実行が中断されることはありません。 |
ブレークポイントアイコン
タイプと ステータスに応じて、ブレークポイントは次のアイコンでマークされます。
行 | メソッド | Field | 例外 | |
|---|---|---|---|---|
標準 | ||||
無効 | ||||
検証済み | ||||
ミュート | ||||
非アクティブ / 依存 | ||||
ミュートされた非アクティブ / 依存 | ||||
ミュート無効 | ||||
中断しない | ||||
確認済みの一時停止なし | ||||
無効 | ||||
生産性のヒント
- "printf" デバッグのためにブレークポイントを使用する
print ステートメントをコードに挿入する代わりに、 サスペンドしない ログブレークポイント(他のデバッガーでは watchpoint と呼ばれることもあります)を使用してください。これにより、デバッグのログメッセージをより柔軟かつ一元的に処理できます。 これにより、デバッグ用ログメッセージの処理がより柔軟かつ一元的に行えます。
- ログブレークポイントをより迅速に設定する
非停止 ログブレークポイントを設定するには、 Shift を押しながらガターをクリックします。 これによりプログラムの実行は一時停止せず、代わりに
Breakpoint reached at ocean.Whale.main(Whale.java:5)といったメッセージのログが記録されます。 エディターで目的の式をログしたい場合は、 Shift を押しながらガターをクリックする前に、その式を選択してください。- ブレークポイントの説明を追加する
プロジェクト内に多数のブレークポイントがある場合、検索を容易にするためにブレークポイントに説明を追加できます。 これを行うには、 ブレークポイント ダイアログ Ctrl+Shift+F8 でブレークポイントを右クリックし、メニューから 説明の編集 を選択します。 これで、ブレークポイント名を入力し始めると、そのブレークポイントがフォーカスされます。
- ラムダ式とメソッド参照の比較
JVM の設計上、メソッド参照はスタックトレース上でラムダ式とは異なり、有用な情報を提供しません。 さらに、メソッド参照にはブレークポイントを設定できません。 メソッド参照によって重要な箇所でのトレースが困難になる場合は、代わりにラムダ式の使用を検討してください。
- 致命的なエラーの原因を診断する
例外ブレークポイントは
Throwableと連携し、エラーのサブクラスがスローされた場合にもプログラムを一時停止させるために利用できます。 これは、OutOfMemoryErrorやStackOverflowErrorのようなエラーの原因調査に役立ちます。 これらのために例外ブレークポイントを設定しておけば、クラッシュする前にプログラムで何が起きたかを調査することができます。- 並行性の課題についてプログラムをテストする
並行性の観点からマルチスレッドプログラムの堅牢性を確認するには、ヒットした際に 1 つのスレッドのみを一時停止するブレークポイントを使用すると効果的です。 単一スレッドの停止によって、アプリケーション設計上それまで気づかなかった問題が明らかになる場合があります。