我知道有一些JAVA_OPTS来设置远程调试Java程序。
JAVA_OPTS
它们是什么?它们的含义是什么?
我有这篇文章书签设置为Java 5及以下。
主要运行它:
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044
对于Java 5及以上版本,使用以下命令运行它:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044
如果你想让Java在执行应用程序之前等待你的连接,用suspend=y替换suspend=n。
suspend=y
suspend=n
在Java 5.0之前,使用-Xdebug和-Xrunjdwp参数。这些选项在以后的版本中仍然可以工作,但是它将以解释模式而不是JIT模式运行,后者会更慢。
-Xdebug
-Xrunjdwp
从Java 5.0开始,最好使用-agentlib:jdwp单个选项:
-agentlib:jdwp
-Xrunjdwp或agentlib:jdwp参数的选项是:
agentlib:jdwp
transport=dt_socket
address=8000
对于java 1.5或更高版本:
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>
对于java1.4:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>
对于java1.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
这是最简单的解决办法。
如果您正在使用Maven,则需要许多环境专用配置。所以,如果你从maven启动你的程序,只需运行mvnDebug命令而不是mvn,它将负责启动你的应用程序配置远程调试。现在可以在端口8000上附加调试器。
mvnDebug
mvn
它会为你解决所有的环境问题。
因为Java 9.0 JDWP默认只支持本地连接。 http://www.oracle.com/technetwork/java/javase/9-notes-3745703.html#JDK-8041435 < / p >
对于远程调试,应该在address中运行带有*:的程序:
*:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8001,suspend=y -jar target/cxf-boot-simple-0.0.1-SNAPSHOT.jar
address指定了它将允许调试的端口
address
**用Maven调试Spring Boot应用程序:
mvn spring-boot:run -Drun.jvmArguments=**"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8001"
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=PORT_NUMBER
gradle bootrun --debug-jvm
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=PORT_NUMBER
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=PORT_NUMBER
这里我们只使用套接字连接连接器,当配置了dt_socket传输并且VM运行在服务器调试模式时,默认启用该连接器。
有关更多详细信息,你可以参考:https://stackify.com/java-remote-debugging/
如果你使用java 9或更高版本,要远程调试(当你在本地使用docker时也是如此),你必须提供--debug *:($port)。因为在java 9中,--debug ($port)只允许调试在本地,而不是远程。
--debug *:($port)
--debug ($port)
command: -- /opt/jboss/wildfly/bin/standalone.sh --debug *:8787