一尘不染

在不使用调试参数启动JVM的情况下调试Java应用程序

java

通常,要将调试器附加到正在运行的jvm,您需要使用以下参数启动jvm:

> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n

现在,如果我要调试不是在调试模式下启动的进程,该怎么办?

当生产系统(即在没有调试args的情况下启动)显示“随机”(我用宽松的术语)错误时,就会出现这种情况。因此,我无法使用适当的参数重新启动jvm,因为没人知道如何再次再现该错误。在这种情况下是否不可能附加到JVM?

只是为了澄清,除非将它们以调试方式启动,否则无法使用jdb之类的工具将其附加到已经运行的JVM中

从JVM手册页

使用jdb的另一种方法是将其附加到已经运行的Java VM。使用jdb调试的VM必须使用以下选项启动:


阅读 393

收藏
2020-03-23

共1个答案

一尘不染

你可能可以使用jsadebugd(JDK)将调试服务器附加到进程(在Windows上可通过Windows的调试工具获得)。它被标记为实验性的,因此你可能需要首先在测试机上进行尝试。

用法:

jsadebugd <pid>
jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost

可以使用找到带有arg的连接器名称jdb -listconnectors

2020-03-23