调试exec工作正常,但正常的一个段错误

时间:2012-03-01 16:41:34

标签: c++ debugging gcc gdb segmentation-fault

我有以下代码: -

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

someFunc是我从一个我无法控制的库中获得的回调。如果我使用gdbon = true编译它,则生成的exec完全按照预期的方式工作。 另一方面,如果我编译它没有上面的标志,exec段错误。在gdb中打开core-dump显示了

obj=Variable "obj" is not available.

关于如何进一步缩小问题范围(或可能出错的问题)的任何想法?

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

void someFunc (someStruct* obj) {
    if (obj==NULL) return;
    cout<<"here1\n";
    cout<<obj->some_member;
    cout<<"here2\n"
}

这会随机导致

here1

有时和

here1
here2

其他一些时候。有点让我有点困惑...... 但问题出在其他地方......

1 个答案:

答案 0 :(得分:1)

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