有没有办法如何捕获Java应用程序(或整个JVM)的状态以供以后调试(替代本机可执行文件的核心转储)?
我知道堆转储和线程转储,但这些不允许真正检查应用程序状态:获取所有线程的所有堆栈帧的所有可用变量的值。
使用案例:我使用的应用程序因某些异常而崩溃。使用快照我可以将调试器附加到应用程序,设置异常断点并将JVM暂停到相同的有趣状态,创建快照并将其发送给开发人员进行检查。
到目前为止我发现了:
JSR 326: Post mortem JVM Diagnostics API
陈述:未完成,休眠
gcore + jsadebugd + jdb
$ gcore <pid>
Saved corefile core.<pid>
$ jsadebugd /path/to/executable/java core.<pid>
# from other terminal
$ jdb -connect sun.jvm.hotspot.jdi.SADebugServerAttachingConnector:debugServerName=localhost
这几乎就是这样。但它无法与IDE(如Eclipse或IDEA)一起使用。