gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 04:30:39 24 4
gpt4 key购买 nike

我正在调查由于 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com