Java/Eclipse: 在调试模式下启动新的JVM

8

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

如果可以,怎么做呢?


可能是如何设置Java命令行选项以允许远程调试JVM?的重复问题。 - ivan_pozdeev
这是一个特定于Eclipse的问题。 - Jason S
2个回答

7
实现您(可能)想要的一种方法:启用第二个JVM进行远程调试。据我所记,您可以告诉JVM等待远程调试器连接到会话。然后,在生成“子JVM”之后,在eclipse中启动远程调试会话。 这是经典VM的一组参数
java -Xdebug -Xnoagent -Djava.compiler=NONE 
     -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005 ...

(suspend=y表示JVM要等待调试器,5005是本例中的端口号)

从JavaSE 1.5开始,这些被替换为标准化的参数:

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

更多信息请访问:http://www.ibm.com/developerworks/opensource/library/os-eclipse-javadebug/index.html - eee
嗯,这个 几乎 可以工作。问题在于 JVM 将在未来某个时候启动,我无法告诉 Eclipse 稍后等待。它似乎期望所需的 JVM 现在 可用。 - Jason S
@Jason - 嗯,我的理解是你(1)启动父应用程序,(2)使用suspend=y生成子JVM,然后(3)在Eclipse中启动远程调试会话。这样行不通吗? - Andreas Dolk
只有在我将客户端/服务器应用程序中的超时时间增加到可以容忍手动执行步骤(1)后手动执行步骤(3)所需的时间点上,这才有效。如果这是我的唯一选择,那我会处理。我宁愿让步骤(3)以某种自动方式发生。 - Jason S
@JasonS 要自动执行步骤(3),Eclipse 必须以某种方式监听请求启动调试会话,以便你的应用程序可以发送请求。 - ivan_pozdeev

3
如果您正在开发Eclipse插件,您可以使用Eclipse的启动新应用程序机制,使用DebugUITools即可。
org.eclipse.debug.core.DebugPlugin.launch(configuration, "debug");

我曾经使用过这个方法来以调试模式启动应用程序,它按预期工作,包括在eclipse中设置断点、变量内省等方面的完全支持。如果这就是你想要的,那么你应该尝试一下。


这不是一个 Eclipse 插件,但这是有用的信息,以备将来参考。 - Jason S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接