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命令行
时间: 2024-10-11 10:09:15

Unix 用gdb分析core dump文件的相关文章

GDB调试core dump文件示例

上篇论述了三层的基本概念,作用,关系,现在展示下系统中用户登陆过程中简单应用三层结构设计思想. vb.NET的操作如下 首先建立以下windows应用程序以及类库 首先建立实体类 Public Class userInfo Private _username As String Public Property UserName As String Get Return _username End Get Set(ByVal value As String) _username = value E

用gdb调试core dump文件

gdb基本的使用方法在此就不说了. 载入core文件的命令行为: dgb exe core 例如 gdb ./testall ./core.2345 最重要的一个命令是where,这个就像windbg的命令 !analyze -v 我模拟了几个crash的情况,一个一个说. 第一个:删除两次指针导致crash的情况 源程序 char *a = new char[2]; delete []a; delete []a; 运行时 *** glibc detected *** ./testall: do

Linux上Core Dump文件的形成和分析

原文: http://baidutech.blog.51cto.com/4114344/904419 Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core进程的内存空间越大,此过程可能持续很长一段时间(例如当进程占用60G+以上内存时,完整Core文件需要15分钟才能完全写到磁盘上),这期间产生的流量损失,不可估量. 凡事皆有两面性,OS在出Core

用gdb分析core文件及常见gdb命令操作示例

1.概述 在实际的软件开发项目中,程序出现问题是在所难免的.遥想本人参加工作之后首次遇到程序的情景,至今还历历在目.之前的经验告诉我,我们越是惊慌失措,问题就越是解决不了.我们要先让自己平静下来,然后再寻找解决程序问题的办法. 在Linux下做开发的朋友,想必都与core文件打过交道.当看到自己的程序运行之后出现core时,很多人都慌乱了,仿佛天快要塌下来一样.其实,我们大可不必如此,只要我们掌握了用gdb调试core文件的办法,依然可以很快定位程序问题,一举将bug消灭掉.有关Linux co

段错误Segment Fault定位,即core dump文件与gdb定位

使用C++开发系统有时会出现段错误,即Segment Fault.此类错误程序直接崩溃,通常没有任何有用信息输出,很难定位bug,因而无从解决问题.今天我们介绍core dump文件,并使用gdb进行调试,以此来定位段错误问题.此文同时用以备忘. 一.core dump Core dump也称核心转储, 当程序运行过程中异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 称之为core dump文件. 系统默认不生成core dump文件,可以使用ulimit命令进行查看和设

【Z】段错误Segment Fault定位,即core dump文件与gdb定位

使用C++开发系统有时会出现段错误,即Segment Fault.此类错误程序直接崩溃,通常没有任何有用信息输出,很难定位bug,因而无从解决问题.今天我们介绍core dump文件,并使用gdb进行调试,以此来定位段错误问题.此文同时用以备忘. 一.core dump Core dump也称核心转储, 当程序运行过程中异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 称之为core dump文件. 系统默认不生成core dump文件,可以使用ulimit命令进行查看和设

gdb调试常用实用命令和core dump文件的生成(转)

1.生成core dump文件的方法: $  ulimit -c //查看是否为0 如果为0 $   ulimit -c unlimited 这样在程序崩溃以后会在当前目录生成一个core.xxxx的文件 2.调试core dump文件 生成了core.xxx文件以后 $  gdb ./应用程序  core.xxxx 就会恢复现场到你的程序崩溃的那一刻 (gdb)bt          //这个命令会列出程序崩溃时的堆栈信息,一层一层会有标号  #0  #1  #2 ....... 如果你要查看

Linux使用笔记: 定制core dump文件的文件名

在开发过程中,当一个Linux程序异常退出时,我们可以通过core文件来分析它异常的详细原因.缺省情况下,Linux在程序异常时不产生core文件,要想让程序异常退出时产生core dump文件,需要使用ulimit命令更改coredump的设置: ulimit -c unlimited 上面的命令表示在程序异常时产生core dump文件,并且不对core dump文件的大小进行限制. 上述设置只是使能了core dump功能,缺省情况下,内核在coredump时所产生的core文件放在与该程

linux下生成core dump文件方法及设置【转】

转自:http://blog.csdn.net/mrjy1475726263/article/details/44116289 源自:http://andyniu.iteye.com/blog/1965571 core dump的概念: A core dump is the recorded state of the working memory of a computer program at a specific time, generally when the program has te