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