GDB 调试coredump及 不生成core文件


linux下不产生core文件的原因_Small-K的博客-CSDN博客_没有生成core文件

不产生core文件的原因
最近在用gdb调试时,故意让一个进程core dump,但是却没有产生core文件,解决过程如下:

首先考虑了系统限制问题,shell键入
ulimit -a
查看core文件有没有限制大小,发现没有,是unlimited,所以不是这个原因
(如果大小为0,说明禁止了core文件的产生,可以通过 ulimit -c unlimited 来解除限制)

其次考虑是不是程序实现和权限方面的问题
查阅资料,总结不产生core的相关情况如下:

程序设置了用户id(即调用setuid),但当前用户并非该程序文件的所有者
程序设置了组id(即调用setgid),但当前用户并非该程序文件的组所有者
用户没有当前目录或指定core文件产生目录的写权限
core文件太大,磁盘空间不足
但以上并没有解决我的问题

考虑core文件产生位置
core的缺省位置是程序所在目录,可以通过修改/proc/sys/kernel/core_pattern来指定core文件生成位置了名称。
通过查看core_pattern文件,发现其确实指定了一个路径,于是我前往那个路径,发现竟然是脚本程序,后来查看说明文件,才知道core_pattern中如果首先指定了一个 ‘|’ 管道符,则会将生成的core文件传递给后面所跟的脚本去处理。
至此,也就确定了问题的原因,| 管道符后面的脚本将我们的core文件给吞了,解决方法自然就是去掉这个脚本,换成自己指定的目录
但直接去修改core_pattern文件并没有成功,保存时会提示FSync错误,查阅资料得知,这个文件有特殊限制,只能通过命令:
sudo bash -c "echo 这里是写入内容 > /proc/sys/kernel/core_pattern "
我使用:
sudo bash -c "echo core > /proc/sys/kernel/core_pattern "
来进行写入,即指定程序所在目录为core文件生成目录,core文件名称为"core"。

之后再运行程序,core dump后,即在当前程序文件目录下生成了core文件

gdb调试coredump(使用篇)_sunxiaopgdb调试coredump(使用篇)_sunxiaopengsun的博客-CSDN博客_gdb调试coregdb调试coredump(使用篇)_sunxiaop


 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值