【发布时间】:2013-02-04 05:11:10
【问题描述】:
我正在开发一个 C++ 程序(Win32,MS Visual Studio 2008),它通过 JNI 创建一个 Java VM,如here 所述。它在 Java 6 和 Java 7 上都可以正常运行很长时间了。
今天我安装了新版本的JRE;安装程序出现问题,JRE 损坏。我注意到我的 C++ 程序没有启动并且没有发出任何警告消息。调试程序显示运行成功,直到调用JNI_CreateJavaVM;但是调用JNI_CreateJavaVM 会导致程序立即终止。没有返回值,没有错误消息,什么都没有。
是的,我知道我只需要重新安装 JRE。但尽管如此,我希望我的 C++ 程序能够为这种情况做好准备。如果它无法创建 Java VM,它应该显示一条消息“请重新安装 JRE”。但我没有机会显示该消息,因为整个程序正在终止。
有没有办法在 JRE 中检测这种类型的错误,或者更一般地,在第三方库中检测到此类错误?我尝试使用 C++ try/catch 构造,我尝试使用 signal 函数 - 没有任何帮助;程序在没有调用任何 catch 或信号处理程序的情况下消失。
有没有办法检测这种 JRE 崩溃?或者:有没有办法可靠地检测第三方库中的崩溃或终止?
【问题讨论】:
-
在什么环境下?有依赖于操作系统/依赖于编译器的方式..(如 MS c++ 上的 __try __except)
-
或SetUnhandledExceptionFilter for win32
-
@dema80,是的,它是 Win32。感谢您的提示,我编辑了问题。
-
我在 how to make a hook on ExitProcess 上找到了一个 über-hackerish 指令。虽然,在我的特定用例中,它有点矫枉过正。我将求助于在我们的技术支持数据库中写一篇文章:“如果应用程序无法启动,请重新安装 JRE”。 :-)
标签: java c++ java-native-interface jvm-crash catch-all