linux下coredump文件产生及分析

文章介绍了在Linux系统中如何生成coredump文件,包括使用`ulimit-cunlimited`解除限制,以及如何设置coredump的存储路径和文件名。此外,还阐述了如何通过`/proc/sys/kernel/core_pattern`配置文件名格式。当程序崩溃时,可以利用gdb对coredump文件进行分析,例如通过`bt`命令查看调用栈。

前言

cordump是程序崩溃时产生的包含一些堆栈,寄存器信息的文件。windows下如何捕获并分析已做说明,在此只做linux下的说明

如何产生coredump文件

通过ulimit -c查看coredump文件大小限制,一般为0,表示不产生coredump文件,我们需要使用ulimit -c unlimited解除限制,但当关了终端后又会恢复为0

如何设置永久生效

以下修改只对当前用户永久生效
vim ~/.bashrc
在文件末尾追加
ulimit -c unlimited
保存文件后使其立刻生效
source ~/.bashrc

修改coredump路径及文件名

coredump默认产生在程序执行目录,但是当在程序中修改执行路径后会导致在可执行文件路径找不到
su root
echo /path/to/coredump.%e.%p > /proc/sys/kernel/core_pattern

%p - 插入当前的pid
%u - 插入当前的uid
%g - 插入当前的gid
%s - 插入导致产生core文件的信号
%t - 插入core文件生成时的时间
%h - 插入主机名
%e - 插入程序名

对coredump文件进行分析

通过一段代码来演示如何分析

### 关于Linux CoreDump文件的生成、查看与分析 #### 一、CoreDump概述 当程序崩溃时,操作系统会自动生成一个名为CoreDump的核心转储文件。该文件包含了进程终止时刻内存映像以及有关寄存器状态的信息,对于开发者来说是非常重要的调试资源[^1]。 #### 二、CoreDump文件的生成方式 ##### ulimit命令控制Coredump大小限制 通过`ulimit -c unlimited`可以取消对核心转储文件大小的默认限制,从而允许生成完整的core dump文件。 ##### 使用sysctl调整内核参数 可以通过修改系统的内核参数来启用或禁用core dump功能。具体操作如下所示: ```bash sudo sysctl -w kernel.core_uses_pid=1 ``` 这行指令使得产生core dump文件名后面附加有进程ID,有助于区分不同进程产生core dump文件。 ##### 设置core_pattern定义输出路径及格式化名称 为了更灵活地管理core dump文件的位置和命名规则,可通过编辑`/proc/sys/kernel/core_pattern`文件实现定制化的保存方案。例如下面这条命令将会把所有的core dumps都放到指定目录下,并按照日期时间和PID重命名为易于识别的形式: ```bash sudo sh -c "echo '/data/coredump/core_$(date +%Y-%m-%d_%H-%M-%S)-%p.dump' > /proc/sys/kernel/core_pattern" ``` #### 三、CoreDump文件的存储位置 通常情况下,默认会在当前工作目录中创建core dump文件;但如果指定了特定模式,则可以根据设定好的路径进行存放。比如上面提到的例子就是将所有core dump统一放置到了/data/coredump这个文件夹里[^2]。 #### 四、CoreDump文件分析方法 ##### GDB调试工具的应用 一旦获得了core dump文件后,就可以利用GNU Debugger (GDB) 来加载并检查这些数据。启动gdb的方式很简单,在终端输入以下命令即可开始调查问题所在之处: ```bash gdb ./program_name path_to_core_file ``` 进入交互环境之后便能执行各种诊断动作,如打印栈回溯(`bt`)、变量值查询等,进而帮助找出导致异常的具体原因[^4]。 ##### Objdump反汇编工具辅助理解机器码 除了借助高级别的调试手段外,有时候还需要深入到更低层次去探究程序行为。这时objdump就派上了用场——它能够解析ELF目标文件中的信息,包括但不限于函数地址表、符号表等内容。这对于那些想要了解底层细节的人来说非常有用。 ```bash objdump -S program_name | less ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值