JVMをリモートでデバッグできるように設定するJavaコマンドラインオプションは何ですか?


321

JAVA_OPTSJavaプログラムをリモートでデバッグするために設定する必要があるものがあることを知っています。

それらは何で、どういう意味ですか?

回答:


303

私が持っているこの記事は Java 5のため、以下、このアップの設定のブックマーク。

基本的にそれを実行します:

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

以下のためのJava 5との上に、とそれを実行します。

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

19
言及する価値があるのは、*:1044任意のコンピューターからリモートデバッグを有効にするようにアドレスを構成したい場合があることです
Herr Derb

6
HerrDerbは正解です。Java9以降、「address = 1044」は常にすべてのインターフェースをリッスンしているわけではありません。"address = *:1044"はJava 9+をJava 8のように動作させる...
alfonx

459

Java 5.0より前では-Xdebug-Xrunjdwp引数をください。これらのオプションはそれ以降のバージョンでも機能しますが、JITの代わりにインタープリターモードで実行されるため、速度が低下します。

Java 5.0からは、次の-agentlib:jdwp1つのオプションを使用することをお勧めします。

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

オプション-Xrunjdwpまたはagentlib:jdwp引数は次のとおりです。

  • transport=dt_socket :は、JVMへの接続に使用される方法を意味します(ソケットは良い選択です。離れたコンピューターのデバッグに使用できます)
  • address=8000 :デバッガーから接続するために公開されたTCP / IPポート、
  • suspend=y : 'y'の場合、デバッガが接続されて実行を開始するまで待機するようにJVMに指示します。それ以外の場合( 'n'の場合)は、すぐに実行を開始します。

7
あなたは正確に正しいです..私はしてみました-Xdebug-Xrunjdwpそれはうまくいきませんでした。-Xrunjdwpまたはagentlib:jdwpで試したところ、動作しています。(Java 7の場合)
RoboAlex

私はその周りに引用符を置いたときにのみ、私のために働いていたそう私はこのエラーを得た:ERROR:JDWP非サーバーのトランスポートdt_socketというサーバ= yは8000が接続アドレスは「アドレス=」オプションで指定している必要があります= = Yアドレス中断
リング

1
されXrunjdwp、非推奨(または削除?)なぜ我々は選ぶだろうagentlib:jdwpその上に?
ArtOfWarfare

2
私はあなたが間違っていると思います。Netbeansは-Xdebug -XrunjdwpMavenプロジェクトのデバッグ時に使用し、JITされているように実行されます。
Aleksandr Dubinsky 2016年

78

Java 9.0以降、JDWPはデフォルトでローカル接続のみをサポートしています。 http://www.oracle.com/technetwork/java/javase/9​​-notes-3745703.html#JDK-8041435

リモートデバッグの場合*:、アドレスでプログラムを実行する必要があります:

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

1
これはすべての新しいJavaバージョンに適用される重要なヒントであるため、より多くの投票が得られるはずです。
セバスチャンS

1
ただメモしておきます。Oracleリンクは、これは同じ古い動作を実現すると述べていますが、安全ではなく、推奨されていません。
Chanseok Oh

9

Java 1.5以降の場合:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

Java 1.4の場合:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

Java 1.3の場合:

java -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

以下は簡単なプログラムからの出力です:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 HelloWhirled
Listening for transport dt_socket at address: 1044
Hello whirled

5

java

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8001,suspend=y -jar target/cxf-boot-simple-0.0.1-SNAPSHOT.jar

address デバッグを許可するポートを指定します

メイベン

** MavenでSpring Bootアプリをデバッグします。

mvn spring-boot:run -Drun.jvmArguments=**"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8001"

2

これが最も簡単な解決策です。

Mavenを使用している場合は、多くの特別な環境設定が必要です。したがって、プログラムをmavenから起動する場合は、mvnDebug代わりにコマンドを実行するだけです。mvn、のリモートデバッグが構成された状態でアプリが起動します。これで、デバッガーをポート8000​​に接続できます。

それはあなたのためにすべての環境問題を処理します。


1

コマンドライン

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

Gradle

gradle bootrun --debug-jvm

メイベン

mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=PORT_NUMBER

1
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=PORT_NUMBER

ここでは、Socket Attaching Connectorを使用しています。これは、dt_socketトランスポートが構成され、VMがサーバーデバッグモードで実行されているときにデフォルトで有効になります。

詳細については、次を参照してくださいhttps : //stackify.com/java-remote-debugging/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.