通常,要将调试器附加到正在运行的jvm,您需要使用以下参数启动jvm:
> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n
现在,如果我想调试一个不是在调试模式下启动的进程,我该怎么办?
当生产系统(也就是在没有调试参数的情况下启动)出现‘随机’(我使用这个术语不太严谨)错误时,就会出现这种情况。因此,我不能使用适当的参数重新启动jvm,因为没有人知道如何再次重现错误。在这种情况下连接到JVM是不可能的吗?
为了澄清,不能使用像jdb这样的工具来附加到已经在运行的JVM,除非它们是在调试模式下启动的
从JVM手册页
使用jdb的另一种方式是将其附加到已在运行的Java。要使用jdb调试的虚拟机必须使用以下选项启动:
发布于 2008-12-17 22:27:09
您可以使用jsadebugd (JDK)将调试服务器附加到进程(在带有Debugging Tools for Windows的Windows上可用)。它被标记为实验性的,因此您可能希望首先在测试机器上进行尝试。
用法:
jsadebugd <pid>
jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost
使用jdb -listconnectors
可以找到带有参数的连接器名称。
发布于 2010-06-10 22:52:34
只是澄清一下,不能使用像jdb这样的工具来附加到已经在运行的JVM>>,除非它们是在调试模式下启动的
在苏联的线人读到你
jdb -connect sun.jvm.hotspot.jdi.SAPIDAttachingConnector:pid=9426
发布于 2008-12-17 22:51:14
VisualVM不是一个调试器,但是您可以从它获得线程转储和堆转储,这对诊断一些问题很有用。最有用的特性需要JVM 5或6。
https://stackoverflow.com/questions/376201
复制相似问题