解决:Linux下C++段错误不产生core文件

一、情况描述

在已经使用ulimit - c unlimited 打开了core文件的基础上,运行程序产生了段错误。使用ls命令查看当前目录下的文件,还是没看见任何和.core相关的文件。如下:

首先已经打开了段错误存储的设置:

ulimit -c unlimited

在这里插入图片描述

然后确认已经打开:

ulimit -c

确实是unlimited:

在这里插入图片描述

运行程序产生段错误:
在这里插入图片描述

查看文件发现没有core文件:
在这里插入图片描述

查看相关设置:

$ cat /proc/sys/kernel/core_pattern

发现结果被 | 管道文件符吞了:

在这里插入图片描述

二、解决方法

经过查阅资料:

原来 设置为|/usr/share/apport/apport %p %s %c %P的话,文件的结果会被Linux的一个进程apport 吞掉,拿去检查是不是系统的bug,所以看不到core文件了。

|/usr/share/apport/apport %p %s %c %P

如果想产生core文件,需要关闭这个进程:

sudo service apport stop

然后查看相关内容:

cat /proc/sys/kernel/core_pattern

结果变为core:

在这里插入图片描述

然后在编译文件的时候需要加入 -g 来产生Debug的版本:

g++ client.cpp -o client -g

然后产生段错误就会产生core文件了:
在这里插入图片描述

然后就可以使用命令:

gdb ./clinet core 

进行调试啦!


参考文献:

  1. 链接: 在ubuntu中进行core dump调试
  • 22
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值