关闭

gdb调试core文件

标签: gdblinux
340人阅读 评论(0) 收藏 举报
分类:

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

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:16957次
    • 积分:297
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:0篇
    • 译文:0篇
    • 评论:9条
    文章分类
    最新评论