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

要设置哪些Java命令行选项以允许远程调试JVM?,java,debugging,Java,Debugging,我知道有一些JAVA\u选择来设置远程调试JAVA程序 它们是什么?它们意味着什么?我已经为Java 5及以下版本设置了书签 基本上: 对于,请使用以下工具运行它: -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044 在Java 5.0之前,请使用-Xdebug和-Xrunjdwp参数。这些选项在以后的版本中仍然有效,但它将在解释模式下运行,而不是JIT模式,这将更慢 在Java 5.0中,最好使用-agentl

我知道有一些
JAVA\u选择
来设置远程调试JAVA程序

它们是什么?它们意味着什么?

我已经为Java 5及以下版本设置了书签

基本上:

对于,请使用以下工具运行它:

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

在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的方式(socket是一个不错的选择,它可以用来调试远程计算机)
  • address=8000
    :TCP/IP端口公开,用于从调试器进行连接
  • suspend=y
    :如果为“y”,则告诉JVM等待调试器连接后开始执行,否则(如果为“n”),立即开始执行

对于java 1.5或更高版本:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>

这是最简单的解决方案

如果您使用Maven,则需要很多环境特殊配置。因此,如果您从maven启动程序,只需运行
mvnDebug
命令而不是
mvn
,它将负责启动配置了远程调试的应用程序。现在,您可以在端口8000上附加一个调试器


它将为您解决所有环境问题。

因为Java 9.0 JDWP默认只支持本地连接。

对于远程调试,应使用地址为的
*:
运行程序:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
JAVA
address
指定允许调试的端口

专家 **使用Maven调试Spring启动应用程序:

mvn spring-boot:run -Drun.jvmArguments=**"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8001"
命令行 格拉德尔 专家 这里我们只使用一个套接字连接连接器,当配置dt_套接字传输并且VM在服务器调试模式下运行时,默认情况下会启用该连接器


有关更多详细信息,请参阅:

您的回答完全正确。。我尝试使用-Xdebug和-Xrunjdwp,但没有成功。当我尝试使用-Xrunjdwp或agentlib:jdwp时,它正在工作。(在Java 7上)这只在我用引号括起来时对我有效,否则我会得到这个错误:错误:JDWP非服务器传输dt_socket server=y suspend=y address=8000必须通过“address=”选项指定连接地址我们为什么要选择它呢?我想你错了。Netbeans在调试Maven项目时使用
-Xdebug-Xrunjdwp
,它们运行起来就像JIT一样。值得一提的是,您可能希望将地址配置为
*:1044
,以便从任何计算机启用远程调试。Rderb是正确的。。因为Java9“address=1044”并不总是监听所有接口。“address=*:1044”使Java9+的行为类似于Java8……只需注意:不需要添加
address
参数。如果未提供,代理将选择一个随机端口号。如果在同一java命令行中启动多个节点,这可能会很有用。使用
address=localhost:
vs只选择端口更安全只是做一个说明:Oracle链接说这将实现相同的旧行为,但它不安全,不推荐使用。
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
-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
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