您好,欢迎来到世旅网。
搜索
您的当前位置:首页(Linux) C++ GDB调试 segment default错误

(Linux) C++ GDB调试 segment default错误

来源:世旅网


问题现象

在linux下运行程序时,程序崩溃,界面上显示 segment default段错误,double free or corruption (fasttop): 0x00007fffd06c9b50,看报错的信息可能是有的地方多次释放同一块内存。查看代码,未发现问题,通过查看程序的运行日志文件也没有发现明显的报错。
此时,程序体量较大时,直接通过gdb调试运行程序不可能。但是在Linux下segment default错误会生成core文件,可通过用GDB对产生的core文件排查,快速定位问题出在哪。

1.生成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

2.利用GDB对core文件排查

在终端执行GDB,具体命令如下:
gdb Debug版可执行程序路径 生成的对应的core文件绝对路径;

gdb example core.11632

执行上述命令后,可查看coredump时的调用堆栈,输入:

bt

这里会出现coredump时的代码,显示具体调用的函数名,代码所在文件的行数等信息,然后再。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- esig.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务