如何在Java中捕获崩溃日志

如何在Java中捕获崩溃日志,java,error-handling,crash,Java,Error Handling,Crash,我正在用Java开发一个跨平台的应用程序,该应用程序目前在Windows、Linux和MacOS X上运行良好。我正试图找到一种检测(和处理)崩溃的好方法。有没有一种简单、跨平台的方法来检测Java中的“崩溃”并做出响应 我想我所说的“崩溃”是指意外的例外情况。然而,代码确实使用了一些JNI,因此能够捕获坏JNI代码造成的崩溃是很好的,但我觉得这是JVM特有的。对于处理未捕获的异常,您可以提供一个新的ThreadGroup,它提供了ThreadGroup.uncaughtException(…)

我正在用Java开发一个跨平台的应用程序,该应用程序目前在Windows、Linux和MacOS X上运行良好。我正试图找到一种检测(和处理)崩溃的好方法。有没有一种简单、跨平台的方法来检测Java中的“崩溃”并做出响应


我想我所说的“崩溃”是指意外的例外情况。然而,代码确实使用了一些JNI,因此能够捕获坏JNI代码造成的崩溃是很好的,但我觉得这是JVM特有的。

对于处理未捕获的异常,您可以提供一个新的ThreadGroup,它提供了ThreadGroup.uncaughtException(…)的实现。然后,您可以捕获任何未捕获的异常并适当地处理它们(例如,将崩溃日志发送回家)


在JNI方面,我无法帮助您,在调用JVM之前,可能有一种使用本机包装器可执行文件的方法,但该可执行文件需要知道它可能调用的所有JVM,以及如何指示崩溃以及崩溃日志放置在何处等。

不确定这是否是您需要的,但是,您也可以从本机代码中检测是否发生了异常。有关更多信息,请参阅。

有关简单的“全部捕获”处理,您可以在中使用以下静态方法。从Javadoc:

static void(eh)
设置当线程由于未捕获的异常而突然终止时调用的默认处理程序,并且尚未为该线程定义其他处理程序

这是一种处理错误或未检查异常的非常广泛的方法,这些错误或异常可能在其他任何地方都无法捕获


旁注:如果代码能够捕获、记录和/或从更接近问题根源的异常中恢复,那就更好了。对于完全不可恢复的情况(即,的子类),我会保留这种通用的崩溃处理。尽量避免完全不受破坏的可能性,因为软件可能——而且更可取——能够在这种情况下生存下来。

知道这一点很有用,因为我确实从本机代码调用Java代码,所以这将增加我处理意外异常/崩溃的能力。看起来我将不得不分散代码,使用这样的代码检查崩溃情况。