IntelliJ IDEA 2020.1ヘルプ

ブレークポイント

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

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

ブレークポイントの種類

IntelliJ IDEAでは、次のタイプのブレークポイントを使用できます。

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

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

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

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

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

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

  • ブレークポイントを設定するコードの実行可能な行でガターをクリックします。または、行にキャレットを置き、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
  • 複数のクラスまたはメソッドを一致させるには、デバッグツールウィンドウの左側にあるブレークポイントの表示 View Breakpoints button をクリックし、次に追加 Alt+Insert をクリックしてクラスとメソッドを指定します。 * を使用して、開始、終了、または識別子全体を照合します。

    Add method breakpoint dialog

    構文例:

    クラス

    メソッド

    結果

    *print

    すべてのクラスのprint() メソッド (パラメータリストを使用)

    Printer*

    Printer クラスのメソッド

    Printerset*

    Printer クラスのすべてのsetter

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

  • フィールドが宣言されている行の側ガターをクリックします。または、行にキャレットを置き、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)のようなログメッセージ

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

  • 評価して記録 : "Initializing"users.size()などの任意の式の結果。式はアクセス修飾子を無視し、ブレークポイントが設定されている行のコンテキストで評価されます。

    式の結果は、returnステートメントから取得されます。returnステートメントがない場合、結果は式でなくてもよいコードの最後の行から取得されます。リテラルも機能します。これを使用して、カスタムメッセージを生成したり、プログラムの実行中にいくつかの値を追跡したりできます。

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

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

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

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

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

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

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

フィルター

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

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

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

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

  • クラス・フィルター : ブレークポイント操作を特定のクラスに制限します。

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

フィルタを設定するには、テキストフィールドの近くにあるボタンをクリックしてダイアログを使用するか、テキスト形式で定義します。テキスト形式の場合、次の構文を使用します。

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

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

  • オブジェクトインスタンスは、インスタンスIDを使用して指定されます。オブジェクトがスコープ内にある場合、またはメモリータブを使用している場合、変数タブでオブジェクトIDを見つけることができます。

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

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

  • 呼び出し元フィルターでは、パラメーターと戻り値の型の記述子を使用します(例: mypackage.MyObject.addString(Ljava/lang/String;)V)。記述子の詳細については、公式のOracleドキュメント(英語)を参照してください。

フィルターの例:

-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は最初に条件を満たし、次に通過数をチェックします。

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

フィールド・アクセス

フィールドの読み取り中にウォッチポイントを機能させる場合に選択します。

フィールド変更

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

エミュレート

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

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

メソッドの入り口/出口

メソッド入り口

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

メソッド出口

選択すると、メソッドまたはその子孫が終了するたびにブレークポイントが機能します。

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

キャッチされた例外

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

キャッチされない例外

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

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

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

状況

説明

検証済み

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

警告

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

無効

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

非アクティブ/依存

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

ミュート

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

使用不可

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

中断しない

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

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

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

メソッド

フィールド

例外

標準

line breakpointmethod breakpointfield watchpointexception breakpoint

使用不可

disabled line breakpointdisabled method breakpointdisabled field watchpointdisabled exception breakpoint

検証済み

verified line breakpointverified method breakpointverified field watchpoint

ミュート

muted line breakpointmuted method breakpointmuted field watchpoint

非アクティブ/依存

inactive/dependent line breakpointinactive/dependent method breakpointinactive/dependent field watchpoint

ミュートされた非アクティブ/依存

muted inactive/dependent line breakpointmuted inactive/dependent method breakpointmuted inactive/dependent field watchpoint

ミュート無効

muted disabled line breakpointmuted disabled method breakpointmuted disabled field watchpoint

中断しない

non-suspending line breakpointnon-suspending method breakpointnon-suspending field watchpoint

確認済みの一時停止なし

verified non-suspending line breakpointverified non-suspending method breakpointverified non-suspending field watchpoint

無効

invalid breakpoint

生産性のヒント

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

関連ページ:

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

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

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

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

JVMヒープ内のオブジェクトを分析する

デバッグ時には、メモリータブを使用して、ヒープ内のすべてのオブジェクトの詳細を表示できます。IntelliJ IDEAを使用すると、インスタンスを追跡し、オブジェクトを生成または保持する条件を分析できます。この情報は、メモリリークとその原因を検出できます。一部のエラーは見落としやすいため、コード検査...

コードをデバッグする

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

デバッガセッションを開始する

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