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