linux编程中往往遇到segment fault段错误,定位到错误位置对解决问题有很大帮助,如果要生成core文件,需要打开core dump功能
1)代码打开
struct rlimit rlmt;
if (getrlimit(RLIMIT_CORE, &rlmt) == -1) {
return -1;
}
printf("Before set rlimit CORE dump current is:%d, max is:%d\n", (int)rlmt.rlim_cur, (int)rlmt.rlim_max);
rlmt.rlim_cur = (rlim_t)CORE_SIZE;
rlmt.rlim_max = (rlim_t)CORE_SIZE;
if (setrlimit(RLIMIT_CORE, &rlmt) == -1) {
return -1;
}
if (getrlimit(RLIMIT_CORE, &rlmt) == -1) {
return -1;
}
printf("After set rlimit CORE dump current is:%d, max is:%d\n", (int)rlmt.rlim_cur, (int)rlmt.rlim_max);
2)命令行打开
ulimit -c 1024
下面展示一段出现指针非法访问程序
int *ptr = NULL;
*ptr = 10;
编译时候,打开-g选项
gcc -g xx.c
运行可执行文件后(在linux系统下),在当前执行路径下生成core.xxxx文件,实用gdb调试,调试命令
gdb a.out core.30377 #a.out 为可执行文件
输入bt命令,可以定位到段错误位置信息
5721585732776_.pic.jpg