【发布时间】:2009-06-26 18:45:28
【问题描述】:
我有一个在 Linux 机器上运行的 java 进程,但它无法在调试模式下启动/重新启动。我阅读了jsadebugd 命令并启动了守护程序,但我想从 IDE(可能是 Eclipse)调试器或 YourKit 或 jconsole 连接到它。我怎样才能做到这一点?远程 JVM 是 1.6+。
【问题讨论】:
-
在哪里可以找到解决问题的方法?
我有一个在 Linux 机器上运行的 java 进程,但它无法在调试模式下启动/重新启动。我阅读了jsadebugd 命令并启动了守护程序,但我想从 IDE(可能是 Eclipse)调试器或 YourKit 或 jconsole 连接到它。我怎样才能做到这一点?远程 JVM 是 1.6+。
【问题讨论】:
我假设既然您提到了 Yourkit 和其他工具,那么您真正想要做的是查看应用程序中的对象状态。有几个选项,虽然我不认为它能让你像 Eclipse 或其他调试器那样设置断点(虽然我很想知道是什么限制你在调试模式下启动进程 - 技术? 过程?)
您是否尝试过连接:VisualVM?我认为您不需要以调试模式开始,它将让您能够导航对象图和检查对象。您甚至可以使用它来获取堆转储并使用 OQL 查询通过它们进行一些临时分析。
如果您在 JDK6+ 上运行 - 您是否尝试过使用 btrace 进行检测?一些 notes from the sailfin team 听起来很有希望,就像 Solaris 中的 DTrace,这似乎在各种情况下都很有用。
【讨论】:
我不确定我是否正确理解了您的限制,但您可以在启用调试服务器(服务 JDWP)的情况下启动 JVM。例如,参见http://java.sun.com/j2se/1.4.2/docs/guide/jpda/conninv.html中的“Sun VM 调用选项”
然后您可以将您的 Eclipse 调试器连接到正在运行的 JVM。请参阅此处的“远程调试”部分http://www.ibm.com/developerworks/library/os-ecbug/
【讨论】:
我不确定这是否被 Eclipse 公开,但这里是使用 jdb 的方法:
http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/tooldescr.html#gbmog
【讨论】: