转载http://blog.csdn.net/li_yang98/article/details/3261211
使用C/C++语言开发程序时,当程序crash的时候产生core dump文件对于调试程序是很有帮助的。在Redhat Linux系统中默认是不生成core dump文件的,这是因为在/etc/profile文件中有这样一行
ulimit -S -c 0 > /dev/null 2>&1
如何打开core dump呢?最简单的方法是用户在自己的~/.bash_profile中加入ulimit -S -c unlimited > /dev/null 2>&1,这样设置后允许当前用户生成没有大小限制的core dump文件。此外还有两种系统级修改生成core dump的方法。
第一种方法是修改/etc/profile,把ulimit那一行改为
#vim /etc/profile
#ulimit -S -c unlimited > /dev/null 2>&1
这样设置后系统允许所有用户生成没有大小限制的core dump文件。这样做的优点是不需要重起系统,缺点是无法控制只让某些用户生成core dump文件。
第二种方法是修改/etc/security/limits.conf文件。很多系统上限都可以通过修改这个文件改变,如最大子进程个数,最大打开文件数等等。这个文件有详细的注释,对如何修改这个文件做了说明。如果想对所有用户打开core dump,可以加入一行
如果只想对某些用户或用户组打开core dump,可以加入
注意如果通过修改/etc/security/limits.conf文件打开core dump,还需要注释掉/etc/profile中的ulmit那一行
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <sys/types.h> 5 #include <fcntl.h> 6 #include <dirent.h> 7 #include <unistd.h> 8 9 int main(int argc, char** argv) 10 { 11 int* p; 12 int pid; 13 14 pid = getpid(); 15 printf("%d\n", pid); 16 17 scanf("%d", p); 18 19 return 0; 20 }
#gcc main.c -o app
# gcc main.c -o app
# ./app
7907
5557
Segmentation fault(core dumped)
# ls core.7907
core.7907
#