上一篇博客里我们通过3个例子介绍了gdb调试coredump的时候,比较常用到的一些命令和定位方法。这篇内容里,我们将尝试去探讨gdb调试coredump的原理,以及它们背后的一些东西。
Coredump 的原理
1、coredump简介
上一篇博客,我们也提到coredump叫做核心转储,实际上也就是进程运行过程中的一个内存快照,当进程crash的时候,操作系统接收异常指令之后,在进程crash之前,会把进程做一个内存快照,将这些信息保存在一个文件中,这个文件就是coredump文件。
这个文件里包含进程的内存里的地址信息,寄存器信息,堆栈调用信息等。
能造成进程coredump的信号有:
名字 |
说明 |
ANSI C POSIX.1 |
SVR4 4.3+BSD |
缺省动作 |
SIGABRT |
异常终止(abort) |
. . |
. . |
终止w/core |
SIGBUS |
硬件故障 |
. |
. . |
终止w/core |
SIGEMT |
硬件故障 |
|
. . |
终止w/core |
SIGFPE |
算术异常 |
. . |
. . |
终止w/core |
SIGILL |
非法硬件指令 |
. . |
. . |
终止w/core |
SIGIOT |
硬件故障 |
|
. . |
终止w/core |
SIGQUIT |
终端退出符 |