【问题标题】:java/Eclipse: starting a new JVM in Debug modejava/Eclipse:在调试模式下启动一个新的 JVM
【发布时间】:2026-02-24 23:20:07
【问题描述】:

我的 Java 程序是否可以在调试模式下启动第二个 JVM(通过 ProcessBuilder,例如运行 javaw.exe),以便它出现在 Eclipse 的调试窗口中?

如果有,怎么做?

【问题讨论】:

标签: java eclipse debugging jvm


【解决方案1】:

实现您(可能)想要的一种可能方法:启用第二个 jvm 进行远程调试。据我记得,您可以告诉 jvm 等到远程调试器连接到会话。然后,在生成“child jvm”之后,在 eclipse 中启动一个远程调试会话。

This is the set of parameters for a classic VM:

java -Xdebug -Xnoagent -Djava.compiler=NONE 
     -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 ...

(suspend=y 告诉 jvm 等待调试器,5005 是本例中的端口)

Starting from JavaSE 1.5, these were replaced with a standardized parameter:

java -agentlib:jdwp=transport=dt_socket,address=localhost:9009,server=y,suspend=y

【讨论】:

  • 嗯。好吧,这几乎有效。这里的问题是 JVM 将在未来某个时候启动,我不能告诉 Eclipse 稍后再等待。似乎期望有问题的 JVM现在可用。
  • @Jason - 嗯,我的理解是您 (1) 启动父应用程序,(2) 使用 suspend=y 生成子 jvm,然后 (3) 在 Eclipse 中启动远程调试会话.这不行吗?
  • 只有当我将客户端/服务器应用程序中的超时时间增加到我可以容忍在手动执行步骤 (1) 后手动执行步骤 (3) 所需的时间时才有效。如果这是我唯一的选择,我会处理。我宁愿让步骤 (3) 以某种方式自动发生。
  • @JasonS 自动执行步骤 (3),Eclipse 必须以某种方式侦听启动调试会话的请求,以便您的应用可以发送一个。
【解决方案2】:

如果你正在开发一个 Eclipse 插件,你可以使用 Eclipse 的机制来启动一个新的应用程序,基本上是使用 DebugUITools

org.eclipse.debug.core.DebugPlugin.launch(configuration, "debug");

我曾经用它在调试模式下启动应用程序,它按预期工作,包括完全支持在 eclipse 中设置的断点、变量内省等。如果这是你正在寻找的,你应该试一试。

【讨论】:

  • 它不是一个 Eclipse 插件,但这是有用的信息以供将来参考。