• 什么是core dump linux下用core和gdb查询出现"段错误"的地方


    什么是core dump   linux下用core和gdb查询出现"段错误"的地方

    http://blog.chinaunix.net/uid-26833883-id-3193279.html

    有些时候我们在一段C代码的时候,由于对一个非法内存进行了操作,在程序运行的过程中,出现了"段错误"。

    呵呵,这种问题我想很多人会经常遇到。遇到这种问题是非常无语的,只是提示了"段错误",接着什么都没 有,如果我们一味的去看代码找太疼苦了,因为我们都相信自己写的代码没问题,现实就是现实。下面介绍一种方法,可以有效的定位出现"段错误的地方"。

    当我们的程序崩溃时,内核有可能把该程序当前内存映射到core文件里,方便程序员找到程序出现问题的地方。

    什么是core dump?

    core的意思是内存,dump的意思是扔出来,堆出来。
    为什么没有core文件生成呢?

    有时候程序down了,但是core文件却没有生成.core文件的生成跟你当前系统的环境设置有关系,可以用下面的语句设置一下便生成core文件了
    ulimit -c unlimited

    core 文件生成的位置一般于运行程序的路径相同,在ubuntu下文件名一般 为core.

    什么是core文件

    当一个程序奔溃时,在进程当前工作目录的core文件中复制了该进程的存储图像。core文件仅仅是一个内存映像(同时加上调试信息),主要用来调试的。

    下面我们来看看,怎样利用core文件来定位我们出现"段错误"的地方.

    #不限制core dump文件大小
    ulimit -c unlimited
    
    
    #最大的 core 文件的大小, 以 blocks 为单位。
    ulimit – c unlimited; 对生成的 core 文件的大小不进行限制。

    程序运行结果:

     

    从上面我们可以看出,第一次运行程序出现"段错误"并没有出现core文件,一般linux操作系统默认core文件的大小都是0,需要手动设置一下。

    调试core文件

    core文件是个二进制文件,需要用相应的工具来分析程序崩溃时的内存映像。

    linux下可以用gdb来调试core文件 。

     

    从上面我们可以清楚的看到我们的程序是在那个地方出现了错误。

    呵呵,有了这种方法,我想以后我们可以不再那么惧怕"段错误"了。

    C/C++ 中的 gdb 也是一个类似的命令行 debugger,只是用来调试 C/C++ 而已,使用的模式跟Python的pdb/ipdb相似,具体可参考 用GDB调试程序。

  • 相关阅读:
    华为机试:字符串翻转
    华为机试:数字颠倒
    华为机试:字符个数统计
    华为机试:提取不重复的整数
    华为机试:取近视值
    华为机试:进制转换
    华为机试:字符串分隔
    华为机试:明明的随机数
    华为机试:字符串最后一个单词的长度
    网易:相反数
  • 原文地址:https://www.cnblogs.com/MYSQLZOUQI/p/6031786.html
Copyright © 2020-2023  润新知