调试segment fault

写程序的时候经常遇到 segment fault

当程序很大时不好调试, 于是使用 core-dump 调试

 

用ulimit -c 打印当前coredump大小, 默认是0

于是用 ulimit -c  unlimited 或 ulimit -c 1024  其中1024代表1024k , 通常这个数值大于程序运行时的内存就可以了

把编译选项加 -g重编

 

按理说应该再出现错误时会出现一个core文件了, 可是没有, 再次查看 ulimit -c 居然是0, 最后发现这个命令只能在当前控制台下

输入, 甚至当前文件夹, 因为我在另一个文件夹里写的脚本也失败了

 

再次运行还是没有, 按理说默认是当前目录下生成文件的, 但没有只好手动指定了

echo "/root/core-%e-%p-%t" > /proc/sys/kernel/core_pattern

 

这次终于有了core文件了

gdb a.out  /root/corefile

报错, 于是把corefile移动到跟a.out相同路径就可以了

 

在打印变量值时出现了<value optimized out>, 于是把makefile中的 -O选项去除, 好了,可以看了,

但出错的只是一个最基本的函数, 怎么看调用栈呢

bt

列出了调用栈, OK, 终于找到问题了, 这次的问题是主线程退出后, 没等其他线程退出完毕就调用了某些全局对象的析构函数导致错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值