c++ - Debug exec 工作正常但正常的一个段错误

标签 c++ debugging gcc gdb segmentation-fault

<分区>

我有以下代码:-

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

其他时候。这让我有点困惑...... 但问题出在别处……

最佳答案

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

关于c++ - Debug exec 工作正常但正常的一个段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9520273/

相关文章:

java - 在 Eclipse 中查看 Java 应用程序的日期

javascript - chrome 调试器 promise 在暂停时不解决?

php - OPENSSL Blowfish CBC 加密不同于 PHP 到 C++

c++ - 生成当前获胜的随机数 : CPU vs GPU,?

c++ - 从 map 访问,将字符串转换为 char*

sql-server - 相当于 SQL Server 的 Debug.Assert

c++ - 类/头文件 - 无法调用没有对象的成员

c++ - 返回对 C++11 中复数的实数或虚数值的引用的函数

C 预处理无法在 #error 后立即停止

c - gcc 中的 #pragma 等效项是什么?