linux下coredump文件产生及分析

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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文件进行分析

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

void gen_coredump()
{
    int *ptr = nullptr;
    *ptr = 0;
}

int main(int argc, char **argv)
{
    gen_coredump();
   
    return 0;
}

g++ main.cc -o main -std=c++11 -O0 -m64
执行./main后会产生一个文件名为coredump.main.4110的coredump文件
使用gdb进行分析
gdb ./main
(gdb) core-file coredump.main.4110
gdb) bt
在这里插入图片描述

### 解析Dump文件以诊断Qt应用程序崩溃原因 解析Dump文件是定位Qt应用程序崩溃问题的重要手段之一。以下是针对该需求的具体方法和工具说明: #### 方法一:使用WinDbg进行Dump文件分析 WinDbg是一款功能强大的调试器,适用于Windows平台上的Dump文件分析。它可以加载符号文件(PDB),从而帮助开发者深入理解崩溃的根本原因。 1. **安装与配置** 确保已安装最新版本的WinDbg,并正确配置符号路径以解析堆栈信息[^5]。 2. **打开Dump文件** 在WinDbg中选择`File -> Open Crash Dump...`选项,加载目标`.dmp`文件。 3. **执行基本命令** 输入以下命令获取崩溃的相关信息: ```plaintext !analyze -v ``` 此命令会自动识别崩溃原因并显示详细的调用堆栈及其他上下文数据[^5]。 4. **查看源码关联** 若应用是以调试模式编译的,则可通过附加PDB符号进一步精确定位到具体的代码位置。 #### 方法二:借助Breakpad实现跨平台解决方案 如果需要兼容多操作系统环境,可以采用Google开发的Breakpad工具集。它提供了统一的方式处理崩溃报告。 1. **集成客户端库至应用** 将Breakpad SDK嵌入到Qt工程中,在检测到异常事件时自动生成minidump文件[^4]。 2. **提取符号表信息** 使用`dump_syms`工具从可执行二进制文件生成相应的`.sym`文件,便于后续匹配。 3. **解读核心现场** 调用`minidump_stackwalk`读取之前保存的DMP数据及其对应SYM表格,最终获得线程回溯详情与其他重要线索[^4]。 ```bash minidump_stackwalk <input_dmp_file> <symbol_directory> ``` #### 方法三:基于CrashPad的改进方案 CrashPad作为Breakpad的继任者,具有更高的性能表现和易用性特点。按照引用中的描述[^2],可以通过运行批处理脚本来快速完成一系列操作步骤: 1. 修改脚本参数适配实际项目结构; 2. 执行`crash.bat`启动整个流程; 3. 结果将以TXT文档形式呈现给用户查阅。 ```batch @echo off cd %~dp0 dump_syms.exe ./TestCrashPad.pdb > ./TestCrashPad.sym set crashName=TestCrashPad set /p content=<%crashName%.sym echo %content% for /f "tokens=4,5" %%i in ('echo %content%') do ( mkdir symbols\%%j\%%i move ".\\%crashName%.sym" "symbols\%%j\%%i" ) minidump_stackwalk.exe -s 9e1b2053-8a49-47be-b278-475bb2e1268e.dmp ./symbols >%crashName%.txt pause ``` 以上三种方式各有优劣,可根据实际情况灵活选用最适合自己团队的技术路线实施排查作业。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值