linux之core文件调试

linux之core文件调试

前言

有时候程序会异常退出而不带任何日志,此时就可以使用 core 文件进行分析,它会记录程序运行的内存,寄存器,堆栈指针等信息

什么是core文件

通常在 Linux 下遇到程序异常退出或者中止,我们都会使用 core 文件进行分析,其中包含了程序运行时的内存,寄存器,堆栈指针等信息,格式为 ELF ,可以理解成程序工作当前状态转储成一个文件,通过工具分析这个文件,我们可以定位到程序异常退出或者终止时相应的堆栈调用等信息,为解决问题提供帮助。

core文件配置

查看系统配置生成core文件大小

ulimit -aulimit -c

查看系统配置生成core文件大小

若显示为0,表示没有开启core文件的产生,即程崩溃时,系统不会产生core文件

配置系统关闭生成core文件大小

ulimit -c unlimited

上面对 core 文件的操作仅对当前生效,若需要永久生效,则要将相应操作写入 /etc/profile

修改完成后执行source/etc/profile可以让配置立即生效

配置core文件的文件名称和路径

设置pid作为文件扩展名

echo "1" > /proc/sys/kernel/core_uses_pid

控制core文件保存位置和文件名格式

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

%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 文件生成时的 unix 时间 
%h - insert hostname where the coredump happened into filename # 添加主机名 
%e - insert coredumping executable name into filename # 添加命令名

/proc/sys/kernel/core_uses_pid 这个文件的值若为1,则无论是否配置 %p ,最后生成的 core 文件都会添加 pid

永久生效需要在系统配置文件/etc/sysctl.conf中设置

kernel.core_uses_pid = 1

kernel.core_pattern = ./core-%e-%p

然后执行sysctl -p立即生效

gdb调试方法

直接gdb ./a.out core(core表示生成的具体core文件)或先进入gdb控制台再core调试

gdb ./a.out
...
(gdb) core-file core // (core-file为命令,core表示具体core文件)
...
(gdb) bt 
...

如需要在 PC 上调试嵌入式设备产生的 core 文件,则需要选取相应平台的 gdb 工具,并在进入 gdb 后设置符号文件的位置

xxx-xxx-gdb ./a.out
...
(gdb) solib-search-path xxx.so:xxx.so
...
(gdb) core-file core
...
(gdb) bt
...
posted @   Invinc-Z  阅读(134)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示