Unix 用gdb分析core dump文件

产生core文件条件

用ulimit -c 指定core文件大小来开启core文件的生成,如:ulimit -c unlimited

用gdb分析core文件的条件

可执行程序在编译时,需加入-g参数,否则gdb无法找到symbol信息,从而无法定位问题。

例如,如下两个cpp文件中,test.cpp会导致crash。

// test.cpp

void testCrash()
{
int *p = 0;
*p = 3;
}
// main.cpp

#include <stdio.h>

void testCrash();

int main()
{
testCrash();
return0;
}

在编译时,如下的-g为必须,否则无法定位core文件中问题。

g++ -c -g test.cpp

g++ -c main.cpp

g++ test.o main.o -o main

分析core文件所需文件

  • 程序运行崩溃时产生的core文件
  • 产生core文件的可执行文件

用gdb分析core文件

启动gdb:

  • gdb [executable file] [core file]

进入gdb命令行后,会直接打印出导致crash的相关信息,也可执行如下命令详细查看。

gdb命令行:

  • bt: 打印程序崩溃时的堆栈信息,包括导致crash的对应的frame number,文件名和行数
  • frame [frame number]: 打印出该行代码
  • info locals: 打印局部变量信息
  • print [local variable]: 打印某个局部变量
  • list: 打印相关代码
  • quit: 退出gdb命令行
上一篇:Awesome Big Data List


下一篇:加州大学伯克利分校Stat2.3x Inference 统计推断学习笔记: Section 5 Window to a Wider World