通常要将调试器附加到正在运行的 jvm,您需要使用以下参数启动 jvm:
> java -Xdebug -Xrunjdwp:transport=dt_socket,address=1000,server=y,suspend=n
现在如果我想调试一个不是在 Debug模式下启动的进程,我该怎么办?
当生产系统(即在没有调试参数的情况下启动)出现“随机”(我松散地使用该术语)错误时,就会出现这种情况。所以我无法使用适当的参数重新启动 jvm,因为没有人知道如何再次重现该错误。这种情况下是否无法附加到JVM?
澄清一下,除非它们是在 Debug模式下启动的,否则无法使用 jdb 之类的工具附加到已经运行的 JVM 上
来自 JVM 手册页
Another way to use jdb is by attaching it to a Java VM that is already running. A VM that is to be debugged with jdb must be started with the following options:
最佳答案
您也许可以使用 jsadebugd ( JDK ) 将调试服务器附加到进程(在 Windows 上可用 Debugging Tools for Windows )。它被标记为实验性的,因此您可能需要先在测试机器上试用它。
用法:
jsadebugd <pid>
jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost
可以使用 jdb -listconnectors
找到带 arg 的连接器名称。
关于java - 在不使用调试参数启动 JVM 的情况下调试 java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/376201/