プロセスに接続
IntelliJ IDEA は、ローカルプロセスとリモートプロセスの両方にデバッガーを接続する方法を提供します。
プロセスにアタッチする手順は、プロセスが開始された方法と場所によって異なります。
IntelliJ IDEA デバッガーはどのプロセスにもアタッチできますが、より簡単な方法がある場合はそれを使用することをお勧めします。 同じマシンで実行されている「hello world」にリモートでアタッチすることは望ましくありません。
このトピックで説明するオプションは、リモートで実行されているプロセスをデバッグする必要がある場合や、デバッグを許可しない方法で開始されたプロセスなど、より複雑な場合に役立ちます。
前提条件
アタッチは絶対に必要ではありませんが、本格的なデバッグを有効にするには、次の前提条件を満たす必要があります。
リモートプロセスは、 デバッグエージェントを使用して開始する必要があります。
アプリケーションは、 デバッグ情報を含めてコンパイルする必要があります。
アプリケーションのソースコードが必要です。
これらのいずれも満たされない場合でもデバッグは可能ですが、それぞれに関連する制限があります。 これらの要件については、以降の章で詳しく説明します。
デバッグエージェント
デバッガー接続を許可するプロセスは、デバッグエージェントによって開始されます。 デバッグエージェントは、デバッガーとの通信を担当するホストアプリケーションのコンポーネントです。 プロセスがローカルであるかリモートであるかに関係なく、通信はソケット接続を介して行われます。
デバッグエージェントでプロセスを開始する
プロセスを開始するときに、VM オプションに次の行を追加します。
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005このオプションには、次のパラメーターがあります。
address– デバッグに使用されるポートserver=y– プロセスが受信デバッガー接続をリッスンする必要があることを指定します(サーバーとして機能します)。suspend– デバッガーが接続されるまで VM を待機させるか、アプリケーションのコードをすぐに実行し始めるかを指定します。
-agentlib:jdwp=transport=dt_socket,server=n,address=192.168.1.178:5005,suspend=y,onthrow=<FQ exception class name>,onuncaught=<y/n>このオプションには、次のパラメーターがあります。
address– サーバー側の IP アドレスとポート。 IPv4 と IPv6 の両方がサポートされています。server=n– プロセスがデバッガーに接続する必要があることを指定します (クライアントとして行動する)suspend=y– アプリケーションコードを実行する前に、デバッガーが接続されるまで VM が待機することを指定します。onthrow– オプションで、指定された例外がスローされるまで接続を遅延します。 値として例外の完全修飾名を使用します。onuncaught– オプションで、キャッチされていない例外がスローされるまで接続を遅延します。 値として例外の完全修飾名を使用します。
JDK のバージョンによってフォーマットが異なる場合があります。 JDK に適切にフォーマットされた文字列を取得するには、 リモート JVM デバッグ実行 / デバッグ構成で必要な JDK バージョンを選択し、そこからコピーします。
プロセスが別のプロセス(たとえば Apache Tomcat のような Web コンテナー)を介して起動される場合、デバッグエージェント VM オプションを間接的に指定する必要がある場合があります。 たとえば、別のプロセスがホスト VM にオプションを渡すために設定ファイルを使用している可能性があります。 一般的な Web サーバーやフレームワークの場合、IntelliJ IDEA はこれを自動的に行う 実行 / デバッグ構成を提供しています。
IntelliJ IDEA のデバッグエージェントを追加する。
IntelliJ IDEA の外部で起動されたプロセスをデバッグするときに、 非同期スタックトレースなどの高度な IntelliJ IDEA 機能を使用できます。 そのためには、プロセスに IntelliJ IDEA のデバッグエージェントをロードする必要があります。
javaagentVM オプションを使用して、IntelliJ IDEA のインストールディレクトリから debugger-agent.jar を追加します。 例:java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=\*:5005 -javaagent:"/Users/me.user/Applications/IntelliJ IDEA Ultimate 2024.3.app/Contents/plugins/java/lib/rt/debugger-agent.jar" Alphabet
ローカルプロセスがデバッグエージェントを使用しない場合でも、読み取り専用モードでそれに接続できます。 デバッガーの機能は、コールスタックの表示と、関連するローカル変数の検査に限定されます。
これが役に立つ状況の一例として、いくつかのファイルをバッチ処理しているときにプログラムがハングした場合が挙げられます。 読み取り専用モードを使用すると、どのメソッドがプログラムがハングしたのか、現在どのファイルを処理しているのかがわかります。
デバッグ情報
デバッグ情報は、アプリケーションのバイトコード内の特別な種類の情報です。 デバッガーはこの情報を使用して、ローカル変数、行番号などを識別します。 アプリケーションのバイトコードには、デバッグ情報が含まれる場合と含まれない場合があります。
デバッグ情報は、コンパイル時にプログラムに提供されます。 これは、 -g コンパイラーフラグで制御されます。 デフォルトでは、コンパイラーにはデバッグに必要なほとんどの情報が含まれていますが、アプリケーションをコンパイルしたのがあなたでない場合は、デバッグするプログラムがこの情報なしでコンパイルされている可能性があります。
アプリケーションのバイトコードにデバッグ情報が含まれていない場合でも、デバッガーは接続できますが、デバッガーの機能の一部が使用できない場合があります。 例: 行番号情報がないと、行番号を表示したり、ブレークポイントで停止したりすることはできません。

デバッグ情報が存在するかどうかに関係なく、常に利用できる最低限のもの:
コードが難読化されていない限り、クラス名
静的変数とインスタンス変数
呼び出しスタック
デバッグ情報生成の構成の詳細については、「Java コンパイラーのドキュメント(英語) 」を参照してください。
アプリケーションソース
デバッグするプロジェクトのソースにアクセスできることを推奨します。 IntelliJ IDEA は、デバッグイベントをソースと照合し、デバッグセッションに関連する情報をエディターに表示します。 これにより、実行中のソースコードであるかのようにデバッグセッションを表示できます。

IntelliJ IDEA がソースファイルを見つけるには、それらのファイルがクラスパスに含まれている必要があります。
リモートプロセスへのアタッチ
リモートプロセスへの接続は、次の 2 つのステップで構成されます。
実行 / デバッグ構成を作成する — 実行/デバッグ構成は、接続を確立する方法を指定します。 実行 / デバッグ構成を作成すると、同じホストとポートでの他の接続に再利用できます。
実行/デバッグ構成を開始 – 実行/デバッグ構成を開始すると、実行/デバッグ構成で定義された設定に従って IntelliJ IDEA が起動し、デバッガーに接続します。
実行 / デバッグ構成を作成する
に移動します。 または、 Alt+Shift+F10 を押してから 0 を押します。
実行 / デバッグ構成ダイアログで、ツールバーの
をクリックするか、 Alt+Insert を押します。 リストから リモート JVM デバッグ を選択します。
デバッグモード で、デバッガーがリモート JVM に接続するか、受信接続をリッスンするかを指定します。
リモート JVM をリッスン を選択した場合は、リモート JVM が切断された後にデバッガーを自動的に再始動するかどうかを指定します。 このようにして、デバッガーは常に受信接続を処理する準備ができています。
(Windows の場合) 必要に応じて、目的の トランスポート(英語)を指定します。 IntelliJ IDEA は適切なトランスポートを自動的に選択するため、通信方法に関して特別な要件がない限り、設定する必要はありません。
リモート JVM のホストとポート番号を指定してください。 IPv4 と IPv6 の両方がサポートされています。 ポート番号が正しく指定されていること、使用されていないこと、ファイアウォールでブロックされていないことを確認してください。
ソースを探すモジュールを指定します。 IntelliJ IDEA は、最初に選択されたモジュールをチェックし、次に他のモジュール(存在する場合)をチェックします。 ソースは、完全修飾クラス名を使用して照合されます。 完全修飾名で一致するものがない場合、IntelliJ IDEA はファイル名で一致するものを見つけようとします。
debuggee JVM のデバッグエージェントをまだ構成していない場合は、必要な VM オプションを リモート JVM のコマンドライン引数 フィールドからコピーできます。

実行 / デバッグ構成を開始する
ホストアプリケーションが稼働中であり、 デバッグエージェントを追加する VM オプションで開始されていることを確認してください。

利用可能なプロセスの閲覧},{
Ctrl+Alt+F5 を押すか、メインメニューから を選択します。
IntelliJ IDEA は、実行中のプロセスのリストを表示します。 アタッチ対象のプロセスが表示されない場合は、
で一覧を更新してみてください。 アタッチするプロセスを選択します。
現在のプロセスにアタッチする
IntelliJ IDEA のデバッグエージェントを使用してプロセスを実行すると、コンソールから直接そのプロセスにアタッチできます。
デバッグエージェントを使用して IntelliJ IDEA からプロセスを実行します。
コンソールが表示されたら、 デバッガーのアタッチ インレイヒントをクリックします。

プロセスから切り離す
リモートプロセスからデタッチする手順は、ローカルデバッグセッションを停止する手順と同じです。 ただし、ローカルセッションとは異なり、デバッガーがデタッチされた後もターゲットプロセスは実行され続けます。
デバッグツールウィンドウ の デバッグ ツールウィンドウのツールバーにある 停止
ボタンをクリックします。

または、メインツールバーの 停止
をクリックするか、 Ctrl+F2 を押してから、閉じるセッションを選択します。

リモートプロセスを終了する
リモートプロセスが不要になったら、対応するデバッガータブを閉じることで終了できます。 デフォルトでは、IntelliJ IDEA はプロセスを終了するか切断するかを確認します。

外観 & 振る舞い | システム設定 設定ページ Ctrl+Alt+S でデフォルトの選択をカスタマイズできます。