【发布时间】:2014-12-30 05:09:12
【问题描述】:
大家,
假设我在 Windows 中有一个简单的 JNI 程序:
int* p = NULL;
*p = 5;
当从 JVM 运行它时,与普通的 C++ 应用程序不同,JVM 会很好地捕获此类硬异常并进行一些清理工作。
这里的问题是它也阻止了我在那里生成崩溃转储,虽然有一个 JVM 选项:-XX:OnError,但此时生成的核心转储远离犯罪现场,因此难以调试。
JVM 使用 SEH 包装每个 Java 线程:
__try
{
thread.run()
}
__except(topLevelExceptionFilter())
{
}
导致访问冲突的 JNI 代码发生在 thread.run 中,但在 topLevelExceptionFilter 中处理,它已经在其他地方。
你有什么建议吗?
谢谢。
【问题讨论】:
标签: java java-native-interface dump