Linux core 文件生成与分析

做 Linux 相关的开发工作,core 文件是一定会接触到的。Linux 小白对 core 文件可能会一筹莫展,这里就系统的讲解一下 core 文件的生成,以及怎么利用 core 文件分析问题。

注:本文所用的环境是嵌入式 Linux,相对于 PC 会有一些精简。

1. 基本原理

Core dump 文件是系统收到特定信号时由操作系统生成的。信号可以是由程序运行过程的异常触发,或者由外部进程发送。导致的结果一般是某个进程生成 core dump 文件,文件包含了此进程当前的运行堆栈信息,方便开发人员用来分析问题。

2. 生成 core 文件

ulimit -a 命令查看系统是否已设置可以生成 core 文件。如果 core file size 项是 0,则说明当前系统已经关闭 core 文件生成。
在这里插入图片描述
用 *ulimit -c * 命令开启生成 core 文件功能。

ulimit -c unlimited # 开启 core 文件生成,且不限 core 文件大小
ulimit -c 100 # 开启 core 文件生成,且限 core 文件大小为 100KB

在这里插入图片描述
那生成的 core 文件是放置在哪里呢?
这个同样可以设置,命令如下:

echo /data/core-%p > /proc/sys/kernel/core_pattern

命令中带 *% * 的是参数,可以指定文件名格式,在文件名加上我们想要的信息,可以帮助我们快速定位问题方向;同时也可以区分不同进程的 core 文件。可以使用的参数如下表格:

参数说明
%e所 dump 的文件名
%g所 dump 的进程的实际组 ID
%h主机名
%p所 dump 的进程PID
%s导致本次 coredump 的信号
%t转储时刻 (由1970年1月1日起计的秒数)
%u所 dump 进程的实际用户ID

如使用以下命令设定:

echo /data/core-%p-%s-%e > /proc/sys/kernel/core_pattern

生成的 core 文件如下:
在这里插入图片描述
从 core 文件名就可以看出进程 ID,进程退出的原因,以及出现问题的函数等信息。这是一个 demo 进程,只有一个 main.c 文件,main 函数里面给空指针赋值,所以系统给进程发送 SIGSEGV (11) 信号,使进程退出。

3. 分析 core 文件

Linux 平台常用的 core dump 文件分析工具是 gdb。
我们将以上的 demo 程序稍微改一下,增加一层函数调用,然后我们再分析 core 文件,看能不能定位到出问题的函数。
在这里插入图片描述
经过上面一顿操作之后,生成 core 文件,然后我们再用 gdb 工具来分析。
我所有的 gdb 工具是用交叉工具链编译好,可以直接在嵌入式 linux 上运行的,所以生成 core 文件后,可以直接在运行环境上分析,而不需要拷贝到 PC 上。
用 gdb 分析 core 文件,就可以定位到具体的问题点。
在这里插入图片描述
这里只是简单提到 gdb 的使用,我将在另外一篇详细讲一下 gdb 的使用。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 中,当一个进程遇到致命错误时,它会生成一个 core 文件,也称为核心转储文件。这个文件包含了进程的内存映像、寄存器状态等信息,可以用于分析进程崩溃的原因。 下面是一些常见的分析 core 文件的方法: 1. gdb 调试器 gdb 是一个强大的命令行调试器,可以用来分析 core 文件。简单的做法是通过命令行运行 `gdb <可执行文件> <core 文件>`,然后使用 gdb 的命令来查看内存、寄存器、堆栈等信息。 2. objdump 工具 objdump 工具可以用来分析 ELF 格式的可执行文件core 文件。使用 `objdump -f <core 文件>` 命令可以查看 core 文件的基本信息,使用 `objdump -s <core 文件>` 命令可以查看 core 文件的内存映像。 3. readelf 工具 readelf 工具也可以用来分析 ELF 格式的可执行文件core 文件。使用 `readelf -a <core 文件>` 命令可以查看 core 文件的基本信息,使用 `readelf -x <section> <core 文件>` 命令可以查看特定节的内容。 4. addr2line 工具 addr2line 工具可以将内存地址转换为源代码行号。使用 `addr2line -e <可执行文件> <内存地址>` 命令可以查看特定内存地址对应的源代码行号。 以上是一些常见的分析 core 文件的方法,但是对于复杂的程序崩溃,仍然需要耐心分析。同时,还可以使用其他工具和技术,如 Valgrind、strace、perf 等,来进一步分析进程崩溃的原因
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值