linux之core文件调试
linux之core文件调试
前言
有时候程序会异常退出而不带任何日志,此时就可以使用 core 文件进行分析,它会记录程序运行的内存,寄存器,堆栈指针等信息
什么是core文件
通常在 Linux 下遇到程序异常退出或者中止,我们都会使用 core 文件进行分析,其中包含了程序运行时的内存,寄存器,堆栈指针等信息,格式为 ELF ,可以理解成程序工作当前状态转储成一个文件,通过工具分析这个文件,我们可以定位到程序异常退出或者终止时相应的堆栈调用等信息,为解决问题提供帮助。
core文件配置
查看系统配置生成core文件大小
ulimit -a
或 ulimit -c

若显示为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
...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)