web-dev-qa-db-ja.com

Javaアプリケーションのリモートデバッグ

私は、Linuxマシン上でJavaアプリケーションを実行しています。私は以下の方法でJavaアプリケーションを実行します。

Java myapp -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000, suspend=n

このLinuxマシンのTCP用にポート4000を開きました。私はWindows XPマシンからEclipseを使って、このアプリケーションに接続しようとします。私は窓にも港を開けました。

どちらのマシンもLAN上にありますが、デバッガをJavaアプリケーションに接続することはできません。何がおかしいのですか?

230
Guru

編集:ここで何人かの人が呼び出しをカットアンドペーストしていることに気づきました。私が最初に出した答えはOPだけに関連していました。より現代的な呼び出しスタイルは次のとおりです(より一般的なポート8000​​の使用を含む)。

Java -agentlib:jdwp=transport=dt_socket,server=y,address=8000,suspend=n <other arguments>

元の答えが続きます。


これを試して:

Java -Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=4000,suspend=n myapp

ここで2点:

  1. runjdwpオプションにスペースがありません。
  2. オプションはクラス名の前にあります。クラス名の後にある引数はすべてプログラムへの引数です。
441

JDK 1.3以前の場合

-Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006

JDK 1.4の場合

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6006

新しいJDKの場合

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=6006

必要に応じてポート番号を変更してください。

から Java技術情報

5.0以降では、-agentlib:jdwpオプションを使用して、JDWPエージェントにオプションをロードして指定します。 5.0より前のリリースでは、-Xdebugおよび-Xrunjdwpオプションが使用されます(5.0の実装では-Xdebugおよび-Xrunjdwpオプションもサポートされますが、新しい-agentlib:jdwpオプションは5.0のJDWPエージェントがJVM TIインターフェースを使用するため好ましい古いJVMDIインタフェースではなくVM

もう1つ注意しなければならないことは、 JVMツール・インターフェースの資料 からです。

JVM TIはJDK 5.0で導入されました。 JVM TIは、Java仮想マシンプロファイラインタフェース(JVMPI)およびJava仮想マシンデバッグインタフェース(JVMDI)に代わるもので、JDK 6では提供されなくなりました。

77
Sairam Krish

ステップ:

  1. 上記の記事で述べたように、デバッグオプションを使用してリモートJavaアプリケーションを起動します。
  2. ホストとポートを指定して、Eclipseをリモートデバッグ用に設定します。
  3. Eclipseでリモートデバッグを開始し、接続が成功するのを待ちます。
  4. ブレークポイントを設定してデバッグします。
  5. アプリケーションの最初からデバッグしたい場合は、suspend = yを使用します。これはEclipseから接続するまでリモートアプリケーションを中断したままにします。

詳細については、 Javaリモートデバッグのステップバイステップガイド を参照してください。

27
Gaurav

Javaをカバーする回答> = 9:

Java 9+の場合、JVMオプションは、JVMをホストするマシンのIPアドレスをアドレスの前に付けるか、単に*を追加することにより、わずかな変更が必要です。

-agentlib:jdwp=transport=dt_socket,server=y,address=*:8000,suspend=n

これは、 https://www.Oracle.com/technetwork/Java/javase/9​​-notes-3745703.html#JDK-8041435 に記載されている変更によるものです。

Java <9の場合、接続するにはポート番号で十分です。

3
manouti

これがEclipse Debuggerをリモートデバッグ用に設定する方法です。

Eclipseの設定:

1.実行ボタンをクリック
2.デバッグ設定を選択します
3. [リモートJavaアプリケーション]を選択します。
4.新しい設定

  • 名前:GatewayPortalProject
  • プロジェクト:GatewayPortal-portlet
  • 接続タイプ:ソケットアタッチ
  • 接続のプロパティ:i)ローカルホストii)8787

JBossの場合:

1.次のようにvmの/path/toJboss/jboss-eap-6.1/bin/standalone.confを変更します。#を削除して、次の行のコメントを外します。

Java_OPTS="$Java_OPTS -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n"

Tomcatの場合:

catalina.batファイルでは、

ステップ1:

CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"

ステップ2:

JPDA_OPTS="-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=n"

ステップ3:以下のようにコマンドプロンプトからTomcatを実行します。

catalina.sh jpda start

次に、デバッグしたいJavaクラスにブレークポイントを設定する必要があります。

1
Pritam Banerjee