如果一个程序连续运行多天后出现错,这个时候就不能使用GDB去调试,
使用coredump又叫核心转存,当程序在运行中发生异常,这时Linux系统可以吧程序出错的内存内容存储在core文件中
coredump主要应对什么样的错误呢?
segment fault(段错误)
产生这样的原因:
数组访问越界
访问空指针
栈溢出
修改只读内存
使用coredump,
linux系统中默认是关闭core dump的
通过ulimit命令来打开/关闭core dump功能
打开 :ulimit -c unlimited
关闭 :ulimit -c 0
core文件分析
发生core dump之后,可以使用gdb进行查看core文件的内容,定位程序出错的位置
用法: gdb 程序名 core文件名
例:gdb ./test test.core
手把手教你找错误
例1:访问空指针
#include <stdio.h>
#include <stdlib.h>
void main()
{
int *ptr = NULL;
*ptr = 0;
}
例二
访问只读内存
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
char ptr[] = "123456";
ptr[0] = '7';
}