调试执行工作正常,但正常的一段故障
Debug exec works fine but normal one segfaults
我有以下代码:-
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下运行,这应该会给你一些线索
相关文章:
- 在做一段时间内检查字符的无限循环
- 如何为一段代码启用 -permissive
- ExtTextOut 文本的持续闪烁,在一段时间后,文本将恢复为默认字体
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 使用Qt Creator在调试模式下编译一段代码
- ::grpc::ServerReaderWriter 对象在另一个线程中一段时间后无法调用
- 一段时间后 CPU 使用率高
- 有没有办法在一段时间后将流程从流出中分离出来
- 无法理解一段具有完美转发和省略号的C++代码
- 在一段时间内更改标签文本
- 布尔函数在一段时间内不起作用
- 防止一段代码在协程中并发执行
- 埃拉托色尼的筛子在一段上
- 解决PNP在一段时间后返回坏的rvec和tvec
- 相机的旋转方向在一段时间后反转
- boost::asio::d eadline_timer 1ms 滞后一段时间
- SDL_Mixer再次播放时,从随机位置开始一段时间,然后从头开始
- 您可以在一段时间内迭代向量
- 列表STL的时间复杂性在一段时间内进行排序
- 调试执行工作正常,但正常的一段故障