调试执行工作正常,但正常的一段故障

Debug exec works fine but normal one segfaults

本文关键字:故障 一段 执行 工作 调试      更新时间:2023-10-16

我有以下代码:-

void someFunc (someStruct* obj) {
    cout << obj->some_member;
}

someFunc是我从一个我无法控制的图书馆收到的回电。如果我用gdbon=true编译它,那么得到的exec就完全按照它应该做的那样工作。另一方面,如果我在没有上述标志的情况下编译它,exec-segfault。打开gdb中的核心转储显示

obj=Variable "obj" is not available.

关于如何进一步缩小问题范围(或者可能出了什么问题),有什么想法吗?

编辑:-嘿,原来这不是问题。在代码的后期,出现了一个不安全的内存访问,在gdb看来,在发布版本中(包括优化和所有内容),这是上述代码行中的一个问题。真正令人惊讶的是,我试图这样做:-

void someFunc (someStruct* obj) {
    if (obj==NULL) return;
    cout<<"here1n";
    cout<<obj->some_member;
    cout<<"here2n"
}

这将随机导致

here1

有时和

here1
here2

其他时间。这又让我有点困惑了。。。但问题出在其他地方。。。

尝试在valgrind下运行,这应该会给你一些线索