我知道有一些
它们是什么,意思是什么?
JAVA_OPTS
可用于远程调试Java程序。它们是什么,意思是什么?
-Xdebug
和-Xrunjdwp
参数。这些选项在后续版本中仍然有效,但将以解释模式而不是JIT模式运行,速度会较慢。-agentlib:jdwp
单个选项:-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044
-Xrunjdwp
或agentlib:jdwp
的参数如下:
transport=dt_socket
:表示连接到JVM的方式(socket是一个不错的选择,可以用于调试远程计算机)address=8000
:暴露的TCP/IP端口,用于从调试器连接(仅允许本地连接,请参考Antony Shumskikh的答案以进行远程调试)suspend=y
:如果为'y',告诉JVM等待调试器连接后再开始执行,否则(如果为'n'),立即开始执行。我已经将关于如何在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
suspend=n
替换为suspend=y
。*:1044
,以便从任何计算机启用远程调试。 - Herr Derbaddress
参数,如果未提供,则代理程序将选择一个随机端口号。如果您在同一Java命令行中启动多个节点,则此功能可能很有用。 - asbachbaddress=localhost:<debug port>
比仅选择端口更安全。 - Decoded从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
*:
):address=*:5005 - nobjta_9x_tq适用于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
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"
-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
mvnDebug
命令而不是 mvn
,它会启动具有远程调试配置的应用程序。现在你可以在8000端口附加调试器了。-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=PORT_NUMBER
--debug *:($port)
。因为从Java 9开始,--debug ($port)
仅允许在本地调试,而不允许远程调试。command: -- /opt/jboss/wildfly/bin/standalone.sh --debug *:8787
Xrunjdwp
已经被弃用(或移除了)?为什么我们会选择agentlib:jdwp
而不是它? - ArtOfWarfare