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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值