web-dev-qa-db-ja.com

JVMのリモートデバッグを可能にするために設定するJavaコマンドラインオプションは何ですか?

Javaプログラムをリモートでデバッグするために設定するJava_OPTSがあることを私は知っています。

彼らは何ですか、そして彼らはどういう意味ですか?

284
paulgreg

私は この記事 で、これを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
267
Hans Sjunnesson

Java 5.0より前では、-Xdebugおよび-Xrunjdwp引数を使用してください。これらのオプションは、今後のバージョンでも機能しますが、JITではなくインタープリターモードで実行されるため、遅くなります。

Java 5.0から、-agentlib:jdwp単一オプションを使うほうが良いです:

-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'の場合)、すぐに実行を開始します。
437
paulgreg

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
38

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
7

Java

Java -Xdebug -Xrunjdwp:トランスポート= dt_socket、サーバー= y、アドレス= 8001、サスペンド= y -jarターゲット/ cxf-boot-simple-0.0.1-SNAPSHOT.jar

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

メーベン

MavenでSpring Bootアプリをデバッグします。mvn spring-boot:run -Drun.jvmArguments = " - Xdebug -Xrunjdwp:トランスポート= dt_socket、サーバー= y、サスペンド= y、アドレス= 8001 「

3
Jovi Qiao

コマンドライン

-Xdebug -Xrunjdwp:トランスポート= dtソケット、サーバー= y、サスペンド= n、アドレス= PORT_NUMBER

Gradle

gradle bootrun --debug-jvm

メーベン

mvn spring-boot:実行-Drun.jvmArguments = " - Xdebug -Xrunjdwp:トランスポート= dt_socket、サーバー= y、サスペンド= y、アドレス= PORT_NUMBER

2
Santosh b

Mavenを使用している場合は、多くの環境問題があります。ですから、あなたがあなたのプログラムをmavenから始めたのなら、mvnDebugの代わりにmvnコマンドを実行し、ポート8000​​にデバッガを接続するだけです。それはすべての環境問題の面倒を見ます。

1
neves