在linux下运行程序时,程序崩溃,界面上显示 segment default段错误,double free or corruption (fasttop): 0x00007fffd06c9b50,看报错的信息可能是有的地方多次释放同一块内存。查看代码,未发现问题,通过查看程序的运行日志文件也没有发现明显的报错。
此时,程序体量较大时,直接通过gdb调试运行程序不可能。但是在Linux下segment default错误会生成core文件,可通过用GDB对产生的core文件排查,快速定位问题出在哪。
首先,要想生成有效的core文件,程序需要时Debug版的,这个需要自己编译的时候注意编译debug版。
其次,需要设置core文件的大小。
先查看系统当前对core文件的大小限制,core file size为0表示没有打开core dump设置。终端输入:
ulimit -a #查看系统core文件的大小限制,core file size为0表示没有打开core dump设置。需要先打开;
如果当前限制大小已经满足需求,可不用设置大小,忽略下面步骤。
设置core文件的大小,如果程序比较大,占用内存比较高,建议设置未不限制;
可根据需要自行设定,具体终端设置命令如下:
ulimit -c 0 #不产生core文件
ulimit -c 100 #设置core文件最大为100k
ulimit -c unlimited #不限制core文件的大小
也可以设置core文件的生成路径
sudo sysctl -w kernel.core_pattern=/path/to/core/files/core.%e.%p.%h.%t
在终端执行GDB,具体命令如下:
gdb Debug版可执行程序路径 生成的对应的core文件绝对路径;
gdb example core.11632
执行上述命令后,可查看coredump时的调用堆栈,输入:
bt
这里会出现coredump时的代码,显示具体调用的函数名,代码所在文件的行数等信息,然后再。
因篇幅问题不能全部显示,请点此查看更多更全内容