栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

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

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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看堆栈信息:

最后就可以定位到具体出错的行位置信息。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/468238.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号