我知道需要设置一些JAVA_OPTS来远程调试Java程序。
它们是什么?它们的含义是什么?
我知道需要设置一些JAVA_OPTS来远程调试Java程序。
它们是什么?它们的含义是什么?
当前回答
对于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
其他回答
因为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
-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=PORT_NUMBER
这里我们只使用套接字连接连接器,当配置了dt_socket传输并且VM运行在服务器调试模式时,默认启用该连接器。
更多详情请参考:https://stackify.com/java-remote-debugging/
对于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
如果你使用java 9或更高版本,要远程调试(当你在本地使用docker时也是如此),你必须提供——debug *:($port)。因为从java 9——debug ($port)将只允许在本地调试,而不是远程调试。
因此,您可以在docker-compose中提供命令 命令:——/opt/jboss/wildfly/bin/standalone.sh——debug *:8787
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调试Spring Boot应用程序:
mvn spring-boot:run -Drun.jvmArguments=**"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8001"