<分区>
我有以下代码:-
void someFunc (someStruct* obj) {
cout << obj->some_member;
}
someFunc 是我从我无法控制的库中获得的回调。如果我用 gdbon=true 编译它,那么生成的 exec 将完全按照预期的方式工作。 另一方面,如果我在没有上述标志的情况下编译它,exec 段错误。在 gdb 中打开核心转储显示
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
其他时候。这让我有点困惑...... 但问题出在别处……