2021-11-12 linux下core文件的生成方式以及调试手段

一、什么是core文件?
在程序发现段错误等不寻常退出时,例如错误的内存操作等,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时调试信息,前提是编译时添加-g参数),之后使用gdb调试生成的core文件,来定位到导致程序崩溃的代码所在的具体位置。

二、linux环境配置支持可生成 core 文件
1、core文件开关
使用命令 ulimit -c 查看core开关,如果为0表示关闭,不会生成core文件;
使用命令 ulimit -c [filesize] 设置core文件大小;
使用命令 ulimit -c unlimited 设置core文件大小为不限制其大小;
注:通常使用 ulimit -c unlimited 不限制其大小,不过这中设置方式只是临时生效,若想永久生效,
可以通过在shell的启动脚本/etc/bashrc、~/.bashrc或者/etc/profile等地方来加入 ulimit -c unlimited 命令来指定每次开机启动就会执行设置。
vi /etc/profile,最后一行添加命令ulimit -c unlimited
在这里插入图片描述

之后通过命令ulimit -a 查看设置效果
在这里插入图片描述
2、设置更改core dump文件的生成路径
core文件有默认的名称和路径,为了调试方便,可以通过proc/sys/kernel/core_pattern 文件来控制core文件的生成位置以及文件的命名格式。
可通过以下命令来修改该文件:
echo “/var/core/core-%e-%p-%t” > /proc/sys/kernel/core_pattern
该命令可以设置将生产的core文件统一保存到/var/core/目录下,产生的文件名为core-命令名-pid-时间戳
对应参数意义说明:

%p - insert pid into filename 插入当前的pid

%u - insert current uid into filename 插入当前的uid

%g - insert current gid into filename 插入当前的gid

%s - insert signal that caused the coredump into the filename 插入导致产生core文件的信号

%t - insert UNIX time that the coredump occurred into filename 插入core文件生成时的时间

%h - insert hostname where the coredump happened into filename 插入主机名

%e - insert coredumping executable name into filename 插入程序名
三、验证程序崩溃时生成的core文件以及core文件的调试方式
1、core文件生成
以我本地的一个测试demo为例说明:
简单写个内存错误操作代码:
在这里插入图片描述
记得编译时通过添加 -g 选项参数使程序生成可调试的信息:
在这里插入图片描述
2、通过gdb命令来调试生成的core文件
调试命令:gdb + 可执行程序 + core文件
gdb test core-test-11404-1636687970
然后执行bt看堆栈信息:
在这里插入图片描述
最后就可以定位到具体出错的行位置信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值