3. Coredump故障分析
3. Coredump故障分析
一、定义:Core Dump又叫核心转存。当程序在运行过程中发生异常,这时Linux系统可以把程序出错时的内存内容存储在一个core文件中,这种过程叫Core Dump。
二、Segment fault:这是Core Dump主要解决的错误。Linux应用程序在运行过程中,经常会遇到Segment fault(段错误)这样的错误。产生这样错误的原因通常有:
-
数组访问越界。
-
访问空指针。
-
栈溢出。
-
修改只读内存。
三、Core Dump使能
在Linux系统中,默认是关闭core dump功能的,但是可以通过ulimit命令打开/关闭core dump功能:
打开:ulimit –c unlimited
关闭:ulimit –c 0
四、Core 文件分析。
发生core dump之后,可以使用gdb进行查看core文件的内容,以定位程序出错的位置。
用法:gdb 程序名 core文件名
例:gdb ./test core.core
五、使用gdb+core file找出程序中的错误。
接下来是两个实例:
-
访问空指针:
#include <stdio.h>
#include <stdlib.h>
void main()
{
int *ptr = NULL;
*ptr = 0;
}
但是此时我们用gdb找不到错误的信息,这是因为我们刚才在编译的时候没有加-g,生成调试信息。接下来加上调试信息。下面的调试看到,他直接定位错误的地方:
2.访问只读内存。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main()
{
char ptr[] = "123456";
ptr[0] = '7';
}
我是一只菜鸟!FORFISH!