我正在调查一个导致JVM崩溃的异常,这是由于本机代码中发生了一个错误。为此,我将VS附加到
爪哇语
处理和调试与我的问题相关的函数。
JNIEXPORT void JNICALL Java_org_bytedeco_javacpp_BoolPointer_allocateArray(JNIEnv* env, jobject obj, jlong arg0) {
bool* rptr = new (std::nothrow) bool[arg0];
jlong rcapacity = arg0;
JavaCPP_initPointer(env, obj, rptr, rcapacity, rptr, &JavaCPP_org_bytedeco_javacpp_BoolPointer_deallocateArray);
}
这是JNI生成的代码,用于支持Java和本机代码之间的通信。
由于我怀疑某个条件会触发未处理的异常,最终导致JVM硬崩溃,因此使用断点来研究上面显示的函数。
断点是有条件的,并包含以下条件:
"arg0 < 1" is "True"
它必须在值为一或负值时触发
只有
arg0
值,例如
3178311
.
本地
8900
这使得这个想法不太可能。
在过去我也注意到,有时值不会立即刷新,所以我总是在触发断点时逐步遍历函数,但是值始终大于0。
我做错了什么?为什么断点会触发?VS解决了吗
arg0
非常感谢。