c++ - 条件断点在不应该触发时触发

标签 c++ visual-studio debugging java-native-interface native

由于 native 代码中发生错误,我正在调查导致 JVM 崩溃的异常。为此,我将 VS 附加到与我的问题相关的 javaw 进程和调试函数。

我目前正在查看的功能如下所示:

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 和 native 代码之间的通信。

由于我怀疑某个条件会触发最终导致 JVM 硬崩溃的未处理异常,因此使用断点来调查上面显示的函数。

断点是有条件的,并且满足以下条件:
"arg0 < 1" is "True"

它必须在值为 1 或负值时触发 仅限 .显然我设置不正确,因为断点在 arg0 上反复触发值,例如 3178311 .

首先,我想到了一个溢出,VS 错误地转换了本地窗口中的值,变量在调试时显示。然而,有些值低至 8900这使得这个想法不太可能。

同样在过去我注意到,有时值不会立即刷新,所以当断点触发时,我总是单步执行函数,但是值始终大于 0。

我做错了什么?为什么我的断点会触发? VS 是否解析 arg0适本地?

谢谢你。

最佳答案

如果您将断点放在代码的第一行,则参数的值尚未在 VS 中初始化(如果您手动进入函数也会发生这种情况)。将断点放在第二行(左大括号之后的任何位置),它可能会起作用。

关于c++ - 条件断点在不应该触发时触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53050241/

相关文章:

c++ - 返回其第INDEX个参数的模板函数

c++ - 32 位平台上结构中的对齐

debugging - 崩溃转储和挂起转储之间的区别?

php - 如何在PHP中获得有用的错误消息?

c++ - "predefine"和使用命名空间和 std::shared_ptr 的正确方法是什么?

c++ - boost::flyweight不适用于类

c# - 从C#中的XML中删除所有子节点元素?

c# - 为什么 Request ["host"] == "dev.testhost.com:1234"而 Request.Url.Host == "localhost"

c++ - 防止CWinAppEx派生应用程序中的大型机在LoadFrame()上打开

c# - VS2010 调试问题