【Eclipse】リモートデバッグ

ローカル環境でWebアプリケーションサーバを入れ、
その上でデバッグで動かしながら開発することはよくありますが、
他環境で動作しているWebアプリケーションに対してデバッグする方法。

前提条件として、デバッグ可能な状態でWebアプリケーションを起動していること。
Raspberry PiではTomcatが起動しているので、Tomcatを例にします。

  • デバッグモードでTomcat起動
    「$TOMCAT_HOME/bin/catalina.sh」を確認すると下記ようになっています。

    1if [ "$1" = "jpda" ] ; then
    2  if [ -z "$JPDA_TRANSPORT" ]; then
    3    JPDA_TRANSPORT="dt_socket"
    4  fi
    5  if [ -z "$JPDA_ADDRESS" ]; then
    6    JPDA_ADDRESS="8000"
    7  fi
    8  if [ -z "$JPDA_SUSPEND" ]; then
    9    JPDA_SUSPEND="n"
    10  fi
    11  if [ -z "$JPDA_OPTS" ]; then
    12    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS, server=y,suspend=$JPDA_SUSPEND"
    13  fi
    14  CATALINA_OPTS="$CATALINA_OPTS $JPDA_OPTS"
    15  shift
    16fi

    引数に「jpda」を与えるとデバッグ可能な状態で起動できます。
    自作シェルではそんな引数を受け取れるよう作成していないので、
    「catalina.sh」を直接呼び出します。

    1/etc/init.d/tomcat.sh stop
    2/tomcat/apache-tomcat-7.0.55/bin/catalina.sh jpda start
  • Eclipseの設定

    Eclipseから「実行」-「デバッグの構成」を選択。
    リモートJavaアプリケーションで右クリックして新規を選択。
    接続プロパティーのホスト:z-area.net または Raspberry PiのIP
    接続プロパティーのホスト:8000
    他はデフォルトのまま「適用」ボタン押下。
    「デバッグ」ボタン押下。
    

    ローカルのソースにデバッグポイントを置いて
    Webアプリケーションに接続し、デバッグポイントを通るような操作を行うと
    他環境のWebアプリケーションに対してデバッグできます。

    Eclipseから「デバッグ」ボタン押下してタイムアウトになる場合、
    サーバ側のFWでポート8000を許可する必要があります。