所以我现在几次遇到一个奇怪的错误,我正在寻找一些好的方向来识别问题。
基本上我看到的是一个段错误。症状如下:
- 它仅在程序处于发布模式而不是调试时发生。
它显示为段错误,GDB 告诉我它位于函数末尾的
_list_release
//_free()
中。free()
Program received signal SIGSEGV, Segmentation fault.
0xb0328af8 in _list_release () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
(gdb) bt
0 0xb0328af8 in _list_release () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
1 0xb032a464 in __free () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
2 0xb0329f7d in free () from /usr/qnx650/target/qnx6/x86/lib/libc.so.3
我没有使用任何动态内存(Eigen(或其他库)中可能出现的内存除外)
- 我可以在函数结束之前打印所有局部变量,所以它不是双重释放的。
上次发生这种情况时,这是一个适合所有这些问题的内存故障。恼人的是,这次我找不到问题所在。
我想做的是以下内容:
- 这将非常有用:如何在调试模式下强制此错误,然后 GDB 会更有帮助。
- 找出导致问题的小虫子的最佳方法是什么。注意:我不能使用 valgrind,它在我使用的操作系统(QNX)上不起作用
任何帮助都会很棒。