zoukankan      html  css  js  c++  java
  • gdb调试core文件

    什么是Core Dump?
    Core的意思是内存, Dump的意思是扔出来, 堆出来.开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考.
    core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump。

     

    为什么没有core文件生成呢?
    有时候程序down了, 但是core文件却没有生成. core文件的生成跟你当前系统的环境设置有关系, 可以用下面的语句设置一下, 然后再运行程序便成生成core文件.
    ulimit -c unlimited
    core文件生成的位置一般于运行程序的路径相同, 文件名一般为core.进程号

    当ulimit -c出来的如果为0,说明关闭core文件输出

    image

    当获得了core文件以后,就可以利用命令gdb进行查找,参数一是应用程序的名称,参数二是core文件。

    例子:

    源代码:
    #include <stdio.h>
    
    static void sub(void);
    
    int main(void)
    {
            sub();
                return 0;
    }
    
    static void sub(void)
    {
        int *p = NULL;
    
        /* derefernce a null pointer, expect core dump. */
        printf("%d", *p);
    }
    
    Makefile:
    foo:foo.o
            gcc -o foo foo.o
    
    foo.o:foo.c
            gcc -Wall -g -c foo.c
    
    clean:
            rm -rf foo.o foo

    运行foo之后出现core.14263,分析该core文件:

    image

    【参考文献】

    1、http://www.cnblogs.com/lbsx/archive/2010/10/09/1846535.html

  • 相关阅读:
    HBase权威指南
    Mapreduce编程
    Hive内部表和外部表的区别
    Android Volley全然解析(四),带你从源代码的角度理解Volley
    codeforces 448CPainting Fence
    2.maven 安装配置
    cocos2d-x 3.0正式版创建project笔记
    C. DZY Loves Sequences
    spring 基础回想 tips01
    spring 配置属性细节
  • 原文地址:https://www.cnblogs.com/gsblog/p/3895613.html
Copyright © 2011-2022 走看看