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"

它必须为一值或负值时触发。显然我设置不正确,因为断点在 arg0 值上重复触发,例如 3178311

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

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

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

谢谢。

最佳答案

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

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

相关文章:

c++ - 如何在 C 语言的 gdb 中调试 St9bad_alloc 失败?

c - 快速排序实现麻烦

c++ - 简单的继承问题

c++ - 在 Qt 5.5 中持续检查主循环

c++ - 是否允许(本地)静态初始化过早发生?

c++ - 如何编程关键内存扫描仪的离线形式

c++ - VS2008 中保存时自动重新格式化整个 C/C++ 源文件的免费工具?

c++ - MS 构建错误 MSB8007 : The Platform for project 'MyProject.vcxproj' is invalid. 使用 MSBuild 针对自定义 SDK 构建 Visual Studio 项目

c# - Visual Studio : Test ClassCleanup Timeout When Executing A Batch File

c++ - Visual C++ 2008 'Release' build 包含调试信息