3. Coredump故障分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3. Coredump故障分析相关的知识,希望对你有一定的参考价值。

3. Coredump故障分析

一、定义:Core Dump又叫核心转存。当程序在运行过程中发生异常,这时Linux系统可以把程序出错时的内存内容存储在一个core文件中,这种过程叫Core Dump。

二、Segment fault:这是Core Dump主要解决的错误。Linux应用程序在运行过程中,经常会遇到Segment fault(段错误)这样的错误。产生这样错误的原因通常有:

  1. 数组访问越界。
  2. 访问空指针。
  3. 栈溢出。
  4. 修改只读内存。

三、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找出程序中的错误。

接下来是两个实例:

  1. 访问空指针:

#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‘;

}

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

以上是关于3. Coredump故障分析的主要内容,如果未能解决你的问题,请参考以下文章

Linux内核:分析coredump文件 - 内核代码崩溃

从零开始学习MySQL调试跟踪

没有共享系统库的精确调试符号的远程事后分析 coredump 分析

一个proc预编译代码时coredump的问题分析

如何收集coredump信息

coredump时如何过滤掉共享内存