gdb调试core文件

在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的位置。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/houzhuoming1/article/details/49950065
文章标签: gdb linux
个人分类: C/C++
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

gdb调试core文件

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭