Linux coredump 或 Windows minidump 的 Java 等价物是什么?我读过关于堆转储的内容,它看起来像我想要的,但是如何在未捕获的异常上(自动)触发它们?
我知道未捕获的异常处理程序,并且我已经在使用它来打印异常+堆栈跟踪并终止整个应用程序(否则线程死亡并且应用程序继续运行?嗯?)我还发现了这篇关于如何记录堆的帖子从代码中转储,但是如果我从未处理的异常处理程序中执行此操作,Java 已经捕获了异常并且堆栈跟踪(和参数)消失了。
我遇到了-XX:+HeapDumpOnOutOfMemoryError
似乎可以满足我需要的标志,不幸的是仅针对内存不足的异常,而不针对其他未捕获的异常。
到目前为止,这是我唯一能够摆脱谷歌的东西。目前我正在使用带有异常断点的附加调试器,但这是不切实际的,因为它也会在处理的异常上中断,所以它不能在无人监督的情况下使用。
[动机更新]
我希望能够检查堆栈跟踪的参数和局部变量,以找出导致异常的原因。它通常是空引用异常或失败的断言,我不能总是从行号猜测到底出了什么问题。在 C/C++ 中,我习惯于使用 coredump/minidump 崩溃,然后进一步检查实际导致崩溃的原因。