debugging 要设置哪些Java命令行选项以允许远程调试JVM?

o2rvlv0m  于 2023-11-22  发布在  Java
关注(0)|答案(9)|浏览(149)

我知道有一些JAVA_OPTS设置远程调试Java程序。
它们是什么,它们意味着什么?

esyap4oy

esyap4oy1#

在Java 5.0之前,使用-Xdebug-Xrunjdwp参数。这些选项在以后的版本中仍然有效,但它将以解释模式而不是JIT运行,这将更慢。
从Java 5.0开始,最好使用-agentlib:jdwp单个选项:

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

字符串
-Xrunjdwpagentlib:jdwp参数的选项为:

  • transport=dt_socket:表示用于连接JVM的方式(socket是一个不错的选择,它可以用于调试远程计算机)
  • address=8000:TCP/IP端口暴露,从调试器连接(将只允许本地连接,请参阅安东尼Shumskikh的远程调试答案)
  • suspend=y:如果是,告诉JVM等待调试器连接到开始执行,否则(如果是“n”),立即开始执行。
xqkwcwgp

xqkwcwgp2#

我有this article书签设置为Java 5及以下。
run it with

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

字符串
对于Java 5 and above,运行它:

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


如果您希望Java在执行应用程序之前等待您连接,请将suspend=n替换为suspend=y

bq8i3lrv

bq8i3lrv3#

由于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

字符串

umuewwlo

umuewwlo4#

对于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

siotufzp

siotufzp5#

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

**使用Maven安装Sping Boot 应用程序:

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

olhwl3o2

olhwl3o26#

命令行

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

字符串

Gradle

gradle bootrun --debug-jvm

Maven

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

7uzetpgm

7uzetpgm7#

这里是 maven 构建的最简单的解决方案。
如果您使用Maven,则需要很多环境特殊配置。因此,如果您从Maven启动程序,只需运行mvnDebug命令而不是mvn,它将负责启动配置了远程调试的应用程序。现在您可以在端口8000上附加调试器。
它会为你解决所有的环境问题。

kxkpmulp

kxkpmulp8#

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

字符串
这里我们只使用了一个Socket Attaching Connector,当配置了dt_socket传输并且VM在服务器调试模式下运行时,默认情况下会启用该Connector。
更多详情请参考:https://stackify.com/java-remote-debugging/

mm5n2pyu

mm5n2pyu9#

如果你使用的是java 9或更高版本,要远程调试(当你在本地使用docker时也是如此),你必须提供--debug *:($port)。因为从java 9 --debug ($port)只允许在本地调试 *,而不是远程调试 *。
因此,您可以在docker-compose中提供命令,如command: -- /opt/jboss/wildfly/bin/standalone.sh --debug *:8787

相关问题