【Eclipse】リモートデバッグ

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

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

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

    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
    

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

    /etc/init.d/tomcat.sh stop
    /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を許可する必要があります。