Linux下的coredump和kdump

文章介绍了coredump机制,它是当用户级进程异常终止时保存内存、寄存器等信息的快照,便于通过gdb等工具分析异常原因。同时,提到了如何设置系统允许生成core文件的大小,并展示了gdb结合core文件进行调试的步骤。此外,文章还讨论了kdump,一种在内核崩溃时捕获系统状态的工具,用于分析系统级崩溃的原因。

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

前言

在我们之前介绍进程等待的时候,曾经介绍过父进程会等待子进程并且回收子进程的运行结束状态(status输出型参数):参考博客

在这里插入图片描述

当进程因为一些硬件中断,异常等情况意外终止被信号所杀之后,退出码第8为的coredump标志位就会设置为1,这样其父进程会检测到,并且生成一个core快照文件用于后续寻找异常原因;


coredump是什么?

coredump翻译过来就是核心转储,这个机制会在用户级进程异常挂掉时的一个快照(kdump为内核级进程崩溃下面介绍),保存了异常时的内存、寄存器、堆栈等运行信息。这些数据存储成一个core文件,可以进一步通过gdb等调试器查看分析异常原因;


运行异常代码

在这里插入图片描述

异常代码运行结果

在这里插入图片描述


查看本地文件多出的core文件

在这里插入图片描述

其实core.xxx,这个xxx部分就是当时异常进程对应的pid!

注意:如果无法生成core文件的话,是因为系统默认core文件大小为0字节了,需要用指令ulimit -c xxx 设置一下;

ulimit指令:

  • S:表示软限制,超出设定的值会告警。
  • H :表示硬限制,超出设定的值会报错。
  • a :列出系统所有资源限制的值
  • c:当某些程序发生错误时,系统可能会将该程序在内存中的一些运行信息写成文件(除错用),这种文 件就被称为核心文件(core file)。此为限制每个核心文件的最大容量
  • d:每个进程数据段的最大值
  • f:当前shell可创建的最大文件容量
  • l:可以锁定的物理内存的最大值
  • m:可以使用的常驻内存的最大值
  • n:每个进程可以同时打开的最大文件句柄数
  • p:管道的最大值
  • s:堆栈的最大值
  • t:每个进程可以使用CPU的最大时间
  • u:每个用户运行的最大进程并发数
  • v:当前shell可使用的最大虚拟内存

img


gdb调试带上core文件

在这里插入图片描述

可以看到,这次gdb调试2程序的时候,后面加上上对应的core文件(注意gcc编译得加-g生成debug版的程序才能用gdb调试), 会直接跳转到异常的位置,显示了OS发来的异常信号并且描述了异常原因,这有利于我们调试过程中定位异常等等;


kdump机制

Kdump即kernel dump,内核崩溃转储,他的作用和coredump核心转储一样,场景不同,coredump是在用户级的程序挂掉,而Kdump是内核系统级进程崩溃的时候通过kexec进入第二内核捕获生成的crash dump文件并写入磁盘中;

大致流程: 通过kexec机制–>第一内核崩了后load第二(捕获)内核load到内存运行,并生成与第一内核的映射;
紧接着在第二内核中将core文件写入磁盘,之后系统重启;
后续即可通过该core文件分析系统崩溃原因;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是大帅哥121

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值