gdb调试core文件

原创 2015年11月20日 17:49:34

在Linux下进行C/C++开发的小伙伴们应该都遇到过coredump的情况,遇到情况应该怎么处理呢?怎么定位问题所在?只要分析下core文件,那么就很容易找到程序是在哪一行出现coredump的。通常情况下,在程序出现coredump的时候,系统会把程序运行时的内存,寄存器状态,堆栈指针等信息保存到一个文件中,这个文件就是core文件。

1) 如何让程序崩溃的时候产生core文件?
系统命令: ulimit
查看当前core文件的设置情况:ulimit -a
这里写图片描述
从上面可以看出,core file size的值为0,也就是说程序崩溃的时候不会产生core file,只要设置这个值大于0,那么程序出现coredump的时候就会产生core file了。
设置命令: ulimit -c core文件大小(unlimited代表无限大)
执行命令: ulimit -c unlimited
查看当前core文件的设置情况:ulimit -a
这里写图片描述

这时,在程序coredump就会产生一个core文件。

2) gdb调试core文件

首先编写一个会导致coredump的程序,如下:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *p = "hello world!";
    p[0] = 'a';  // 写只读存储区,这里会出现coredump

    return 0;
}

然后保存在test.cpp文件中,编译: g++ -o test -g test.cpp
编译时添加-g指令可以让core文件保存更多的信息。
执行./test程序后就会在当前目录产生一个core文件,如:core.14809
gdb分析core文件的指令: gdb 程序 core文件
如上面编译得到的程序是test,执行命令: gdb test core.14809
这里写图片描述
从上面可以看出,程序的第6行导致coredump。
同时可以采用:gdb -c core文件 的命令查看core文件的信息。
这里写图片描述

where命令用于查看出现coredump的位置。

版权声明:本文为博主原创文章,未经博主允许不得转载。

linux core文件GDB调试方法

一、如何使用core文件 1. 使用core文件 在core文件所在目录下键入: gdb -c coreXXX 它会启动GNU的调试器,来调试core文件,并且会显示生...
  • wscdylzjy
  • wscdylzjy
  • 2015年06月29日 16:30
  • 873

GDB调试core文件详解

一,什么是coredump         我们经常听到大家说到程序core掉了,需要定位解决,这里说的大部分是指对应程序由于各种异常或者bug导致在运行过程中异常退出或者中止,并且在满足一定条...
  • u010889616
  • u010889616
  • 2015年09月30日 00:13
  • 10587

Linux下使用gdb调试core文件

1.core文件当程序运行过程中出现Segmentation fault (core dumped)错误时,程序停止运行,并产生core文件。core文件是程序运行状态的内存映象。使用gdb调试cor...
  • K346K346
  • K346K346
  • 2015年09月10日 17:09
  • 2486

gdb调试core文件

编写服务器端程序,很容易遇到Crash问题,比较幸运的是Linux提供了core file,保留了Crash的现场。有时候,根据当前的调用栈,并且打印出当前栈的变量就可以分析出crash的原因,但是,...
  • hzhsan
  • hzhsan
  • 2014年07月28日 12:02
  • 9530

gdb调试coredump(使用篇)

什么是coredump   Coredump叫做核心转储,它是进程运行时在突然崩溃的那一刻的一个内存快照。操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态、运...
  • sunxiaopengsun
  • sunxiaopengsun
  • 2017年06月10日 09:35
  • 1442

gdb调试coredump(使用篇)

什么是coredump,ulimit,Windows下miniDump和FullDump的设置,gdb 调试coredump的简单示例,生成core文件,自定义core文件的文件名,设置永久保存,gd...
  • u014403008
  • u014403008
  • 2017年01月07日 15:20
  • 3649

gdb调试coredump(原理篇)

上一篇博客里我们通过3个例子介绍了gdb调试coredump的时候,比较常用到的一些命令和定位方法。这篇内容里,我们将尝试去探讨gdb调试coredump的原理,以及它们背后的一些东西。   Co...
  • u014403008
  • u014403008
  • 2017年01月22日 08:46
  • 828

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

本文以一个实际的程序为例,介绍了用gdb分析core文件的方法和步骤,同时演示了常见gdb命令的操作方法。...
  • zhouzxi
  • zhouzxi
  • 2015年10月08日 19:09
  • 5869

gdb调试core dump入门实践(顺便复习一下之前介绍过的addr2line命令调试)

调试技能是软件开发的必备技能, 不会调试, 就抓不到bug, 就很痛苦。 本文我们来一起聊聊gdb调试core          Part 1:         在前面的博文中, 我们聊过重要的a...
  • stpeace
  • stpeace
  • 2015年11月13日 23:21
  • 3943

gdb 调试coredump文件中烂掉的栈帧的方法

gdb调试core文件,直接backtrace,然后查看用frame n切换栈帧。 info local可以查看当前栈的局部变量。对于烂掉的栈帧,可以参考如下文章来推测对应的符号。 http://...
  • imturkey
  • imturkey
  • 2015年08月26日 16:20
  • 1711
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:gdb调试core文件
举报原因:
原因补充:

(最多只允许输入30个字)