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

pau*_*reg 301 java debugging

我知道有一些JAVA_OPTS设置为远程调试Java程序.

它们是什么,它们是什么意思?

pau*_*reg 446

在Java 5.0之前,使用-Xdebug-Xrunjdwp参数.这些选项仍然适用于更高版本,但它将以解释模式而不是JIT运行,这将更慢.

从Java 5.0开始,最好使用-agentlib:jdwp单个选项:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1044
Run Code Online (Sandbox Code Playgroud)

选项-Xrunjdwpagentlib:jdwp参数是:

  • transport=dt_socket :表示用于连接JVM的方式(套接字是一个不错的选择,它可以用来调试远程计算机)
  • address=8000 :暴露TCP/IP端口,从调试器连接,
  • suspend=y :if'y',告诉JVM等待调试器连接开始执行,否则(如果'n'),立即开始执行.

  • 你是完全正确的..我尝试** - Xdebug**和** - Xrunjdwp**但它没有用.当我尝试** - Xrunjdwp**或**agentlib:jdwp**它正在工作.(在Java 7上) (6认同)
  • `Xrunjdwp` 是否已弃用(或删除?),为什么我们要选择 `agentlib:jdwp` 来代替它? (2认同)
  • 我觉得你错了.Netbeans在调试Maven项目时使用`-Xdebug -Xrunjdwp`,它们就像JITed一样运行. (2认同)

Han*_*son 287

我有这篇文章的书签,为Java 5及以下版本设置.

基本上运行它:

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044
Run Code Online (Sandbox Code Playgroud)

对于Java 5及更高版本,请运行它:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=1044
Run Code Online (Sandbox Code Playgroud)

  • 值得一提的是,您可能希望将地址配置为"*:1044",以便从任何计算机启用远程调试 (13认同)
  • HerrDerb是对的..因为Java 9"address = 1044"并不总是在所有接口上监听."address =*:1044"使Java 9+表现得像Java 8 ...... (4认同)
  • 请注意:_**不需要**_ 添加 `address` 参数。如果未提供,代理将选择随机端口号。如果您在同一 java 命令行中启动多个节点,这可能很有用。 (4认同)
  • 与仅选择端口相比,使用“address=localhost:<debug port>”也更安全 (2认同)

小智 55

由于Java 9.0 JDWP默认仅支持本地连接. http://www.oracle.com/technetwork/java/javase/9​​-notes-3745703.html#JDK-8041435

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

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000
Run Code Online (Sandbox Code Playgroud)

  • 请注意:Oracle 链接说这将实现相同的旧行为,但不安全且不推荐。 (2认同)

the*_*ski 8

对于java 1.5或更高版本:

java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>
Run Code Online (Sandbox Code Playgroud)

对于java 1.4:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>
Run Code Online (Sandbox Code Playgroud)

对于java 1.3:

java -Xnoagent -Djava.compiler=NONE -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 <YourAppName>
Run Code Online (Sandbox Code Playgroud)

这是一个简单程序的输出:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1044 HelloWhirled
Listening for transport dt_socket at address: 1044
Hello whirled
Run Code Online (Sandbox Code Playgroud)


小智 7

爪哇

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8001,suspend=y -jar target/cxf-boot-simple-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)

address 指定允许调试的端口

马文

**使用 Maven 调试 Spring Boot 应用程序:

mvn spring-boot:run -Drun.jvmArguments=**"-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8001"
Run Code Online (Sandbox Code Playgroud)