如何查看分段错误(核心转储)

时间:2013-01-08 03:18:42

标签: gdb segmentation-fault

我无法继续前进,看到核心倾销。

当我输入

时,我得到了这个
gdb normal_estimation core


Reading symbols from /home/sai/Documents/pcl_learning/normal_estimation/build/normal_estimation...(no debugging symbols found)...done.

warning: core file may not match specified executable file.
[New LWP 11816]

warning: Can't read pathname for load map: Input/output error.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/i386-linux-gnu/libthread_db.so.1".
Core was generated by `./normal_estimation'.
Program terminated with signal 11, Segmentation fault.
#0  0xb53101d6 in free () from /lib/i386-linux-gnu/libc.so.6
(gdb) 

请告诉我该怎么办?

1 个答案:

答案 0 :(得分:3)

  

程序因信号11,分段故障而终止   #0 0xb53101d6 in free () from /lib/i386-linux-gnu/libc.so.6

您需要学习的第一个命令是backtrace(或其同义词:where)。

这将告诉您哪个代码调用了free,它崩溃了。

但是,该代码可能与实际问题无关:free中的任何崩溃总是由某种堆损坏引起(释放未分配的内存,释放相同的内存两次,写入已经释放的内存,或者溢出已分配的缓冲区。)

诊断Linux上的堆损坏最有用的工具是ValgrindAddressSanitizer。这些工具中的任何一个都可能会告诉你完全你做错了什么。