调试通过JNI调用的本机代码(并防止JVM在遇到致命错误后中止程序)

Debugging a native code invoked through JNI (and preventing JVM from aborting the program after encountering a fatal error)

本文关键字:遇到 JVM 致命错误 程序 JNI 调用 本机代码 调试      更新时间:2023-10-16

我有一个本地C++代码,它启动JVM并调用Java方法。其中一个Java方法调用本地代码,这些代码可能包含需要调试的错误。然而,每当通过JNI调用的本机代码(C和C++)引发致命错误(如访问冲突)时,JVM就会自动中止程序,同时它应该让调试器向我显示代码中有问题的部分和其他有用信息。我目前仅限于使用Visual Studio 2013学习版在Windows上进行开发,但也欢迎对其他开发环境提出建议。

确保在Structured Exception Handling打开的情况下构建了JNI模块。

在Visual Studio IDE:中

Properties -> Configuration Properties -> C/C++ -> Code Generation -> Enable C++ Exceptions

确保选择了"Yes,with SEH"(是,带SEH)。这将允许您使用传统的try/catch来处理异常,例如访问冲突。