大家好,
假设我在Windows环境下有一个简单的JNI程序:
int* p = NULL;
*p = 5;
当从JVM运行时,与普通的C++应用程序不同,JVM会很好地捕获这样的异常并进行一些清理工作。
这里的问题是它也阻止我在那里生成崩溃转储,尽管有一个JVM选项:-XX:OnError,但在此处生成的核心转储距离犯罪现场远,因此难以调试。
JVM使用SEH包装每个Java线程:
__try
{
thread.run()
}
__except(topLevelExceptionFilter())
{
}
JNI代码引发的访问冲突发生在线程运行时,但已经在另一个地方处理了topLevelExceptionFilter。
你有什么建议吗?
谢谢。