一 、什么是core dump
直译为核心转储,实际就是程序运行崩溃时的内存快照,用来调试程序异常崩溃的工具。
二、配置core dump
1.开启core dump
一般linux 默认是不开启Core dump的,可以通过ulimit -c 来查看,如果等于0就是没开启。如图所示:
可以通过配置/etc/security/limits.conf文件来开启core dump。
找到 soft core那行,解开注释。并配置value为你想要的数字,如图配置为500M。数字大小为core dump最大保存的大小。也可配置为unlimit。
配置完以后重启机器或重新ssh连接服务器就可以。
2.配置core dump格式
配置/etc/sysctl.conf,添加下面两行
kernel.core_uses_pid = 1
kernel.core_pattern = /corefiles/core-%e-%p-%t
其中%e表示进程名字,%p代码进程pid,%t表示时间。
修改完后执行sysctl -p
生效
然后创建文件夹,并添加读写权限(我为了省事直接777了)
mkdir /corefiles
chmod 777 /corefiles/
三、使用举例
1. 故意写一个会出现core dump的程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(){
char* ptr = NULL;
char* str = "core dump";
memcpy(ptr, str, 10);
return 0;
}
2.编译,注意要加上-g
选项
gcc -g main.c -o test_core
运行
这时可以看到在/corefiles
下已经生成一个core dump文件了。
3. 我们用gdb进行调试
gdb ~/mTest/test_core/test_core core-test_core-2668-1623755137
输入bt
gdb告诉我们第七行出错了,错误为Segmentation fault