linux 下的 core dump

linux 下的 core dump

20191331 lyx

1.什么是Core Dump

当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。

core dump 对于编程人员诊断和调试程序是非常有帮助的,因为对于有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程序出错时的情景。

这就让我们可以快速定位出错的代码位置,观察错误的类型,从而快速修复程序。

2.Core Dump 如何产生

Linux 中信号是一种异步事件处理的机制,每种信号对应有其默认的操作,你可以在 这里 查看 Linux 系统提供的信号以及默认处理。默认操作主要包括忽略该信号(Ingore)、暂停进程(Stop)、终止进程(Terminate)、终止并发生core dump(core)等。如果我们信号均是采用默认操作,那么,以下列出几种信号,它们在发生时会产生 core dump:

Signal Action Comment
SIGQUIT Core Quit from keyboard
SIGILL Core Illegal Instruction
SIGABRT Core Abort signal from abort
SIGSEGV Core Invalid memory reference
SIGTRAP Core Trace/breakpoint trap

我们在编程实践过程中就可以利用

程序运行过程中异常终止或崩溃时会发生 core dump

这一特性进行快速调试和修复

3.Core Dump 的相关配置

  • 查看是否开启core dump 若值为0 则为core dump关闭

  • 打开core dump功能

使用命令 ulimit -c unlimited 来开启 core dump 功能,并且不限制 core dump 文件的大小。

  • 测试core dump

使用 sleep 10 命令并在执行过程中使用 crtl\来终止命令就会产生core 文件,以检查core dump功能是否开启。

4.使用GDB和core dump快速定位错误

  • 首先编译源文件时使用 -g 命令,增加调试信息。

  • 执行./server程序,程序异常产生core文件

  • 使用gdb进行调试

可以看到 错误信息 和错误函数都已给出

我们可以快速进行定位修改。

总结core dump很好用,很高效。

参考资料

Linux系统调用--getrlimit()与setrlimit()函数详解 https://www.cnblogs.com/niocai/archive/2012/04/01/2428128.html

Linux上Core Dump文件的形成和分析 https://blog.51cto.com/baidutech/904419

posted @ 2021-12-11 21:31  20191331liyu  阅读(356)  评论(0编辑  收藏  举报