1. coredump 产生的原理和局限
1.1. 如何产生 core 文件
要素一,必须有信号产生:
从上面的信号定义和说明可以看出,进程中止前肯定会产生信号,然后内核根据信号的类型来决定是否要产生 core 文件。
要素二,编译器支持:
要产生 core 文件,编译器必须支持把当前进程的镜像以某种格式 dump 到一个文件中,常见的比如 gcc/g++ 的 -g 选项。
要素三,环境参数支持:
通过 ulimit –a 查看 core file size 是否为 0 ,如果为 0 则不能产生 core 文件。
通过 ulimit –c unlimited 可以系统能支持的产生足够大的 core 文件,也可以设置为具体值。
特别说明:
core 文件的产生不是 POSIX.1 所属部分,而是很多 UNIX/Linux 版本的实现特征。
1.2. Unix/Linux 对信号的处理方式
UNIX System signals |
||||||||
Name |
Description |
ISO C |
SUS |
FreeBSD 5.2.1 |
Linux 2.4.22 |
Mac OS X 10.3 |
Solaris 9 |
Default action |
SIGABRT |
abnormal termination (abort ) |
• |
• |
• |
• |
• |
• |
terminate+core |
SIGALRM |
timer expired (alarm ) |
|
• |
• |
• |
• |
• |
terminate |
SIGBUS |
hardware fault |
|
• |
• |
• |
• |
• |
terminate+core |
SIGCANCEL |
threads library internal use |
|
|
|
|
|
• |
ignore |
SIGCHLD |
change in status of child |
|
• |
• |
• |
• |
• |
ignore |
SIGCONT |
Continue stopped process |
|
• |
• |
• |
• |
• |
continue/ignore |
SIGEMT |
hardware fault |
|
|
• |
• |
• |
• |
terminate+core |
SIGFPE |
arithmetic exception |
• |
• |
• |
• |
• |