JDWPを使用することで、リモートからJavaアプリケーションをデバッグすることができるようになります。
JDWPの設定を行ったアプリケーションに対して、リモートのEclipseからネットワーク越しにデバッグを実行します。また、バッチプログラムにかぎらずAPサーバ上で動作するJavaプログラムに対しても同様にデバッグできます。
環境
- CentOS 8(docker)
- OpenJDK 1.8.0_312-b07
Javaプログラム側設定
Javaの実行時オプションにJDWPの設定を追加します。コマンド行を変更することができない場合、JAVA_TOOL_OPTIONS環境変数を使用することができます。
export JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=y"
オプションのaddressに対して接続ポートを設定します。
またリモートから接続するまでプログラムを停止させる場合は、suspend=yに設定する。APサーバ上のプログラム等、プログラム実行後に接続してもデバッグできる場合は、suspend=nでもOK。
suspend=yで実行した場合、以下のメッセージを出力して実行を停止します。
Picked up JAVA_TOOL_OPTIONS: -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=y
Listening for transport dt_socket at address: 8787
Eclipse側設定
プログラムを停止したいところで、ブレークポイントを設定したのち、Eclipseのデバッグ設定画面を開き、「Remote Java Application」の設定を行います。
接続プロパティで、設定先のホスト名(今回はlocalhost)とポート(今回は8787)を設定します。
Eclipse設定後
接続プロパティ設定後、Debugボタンを押下すると、ネットワーク越しにアプリケーションと接続し、Javaアプリケーションが開始され、ブレークポイント設定箇所まで進みます。