写个简单的程序,看看core文件是不是会被产生。
创建foo.c,使内容如下。
$ more foo.c#includestatic void sub(void);int main(void){ sub(); return 0;}static void sub(void){ int *p = NULL; /* derefernce a null pointer, expect core dump. */ printf("%d", *p);}
$ gcc -Wall -g foo.c 【-Wall :[Warning all] 显示所有常用的编译警告信息。 -g选项,将调试信息加入到目标文件或可执行文件中。】
$ ./a.out
Segmentation fault 【所谓的Segmentation Fault(段错误)就是指访问的内存超出了系统所给这个程序的内存空间】
配置
1> 在/etc/profile中加入以下一行,这将允许生成coredump文件
ulimit -c unlimited
2> 在rc.local中加入以下一行,这将使程序崩溃时生成的coredump文件位于/coredump目录下:
echo "coredump/core.%e.%p.%t" > /proc/sys/kernel/core_pattern
ulimit 修改
命令ulimit -n 65534 临时可以达到效果,隔段时间或者系统重启后又会恢复成系统默认值,一般默认为1024 2
vi /etc/security/limits.conf 在里面添加一行 * - nofile 65535
保存重启,再用命令ulimit -n 可发现文件描述符由默认变成65535了