こんにちは、久しぶりにJavaをやりはじめた河野です。
Tomcatのリモートデバッグを実行する機会があったのですが、久しぶりすぎてやり方が分からなかったので、復習してみました。動作確認をしたバージョンはTomcat6ですが、Tomcat7でも行けるようです。
Java自体のリモートデバッグ方法
Javaの実行時オプションとして以下のように指定する方法があります。
1 |
-agentlib:jdwp=transport=dt_socket,address=10000,server=y,suspend=n |
このオプションはTomcatに限らず、Javaのアプリケーションを実行する際に使用できる方法です。
Tomcatのリモートデバッグ
先ほど紹介したオプションをJAVA_OPTSなどに指定してもよさそうですが、Tomcatの場合には実行スクリプト(catalina.sh)のオプションが用意されているので、それを利用した方がラクだと思います。
1 |
./catalina.sh jpda start |
このjpdaオプションを使用すると、上で紹介したjavaのリモートデバッグオプションを追加して、Tomcatを起動してくれるようになっています。
catalina.shを参照すると以下のようになっていました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
if [ "$1" = "jpda" ] ; then if [ -z "$JPDA_TRANSPORT" ]; then JPDA_TRANSPORT="dt_socket" fi if [ -z "$JPDA_ADDRESS" ]; then JPDA_ADDRESS="8000" fi if [ -z "$JPDA_SUSPEND" ]; then JPDA_SUSPEND="n" fi if [ -z "$JPDA_OPTS" ]; then JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND" fi CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS" shift fi |
ポートの指定などは環境変数で指定すると良いみたいですね。デフォルトのポートは8000なので、例えば10000で起動したい場合には以下のようになります。
1 |
JPDA_ADDRESS=10000 ./catalina.sh jpda start |
ちなみに…
JDK1.5以前は、以下のようにやっていましたが、これは将来的になくなるオプションということです。今は使わない方が良さそうですね。
1 |
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=10000 |