zoukankan      html  css  js  c++  java
  • linux下寻找段错误的方法

    为了能够快速找到发生段错误的地方,记录以下两种方法。

    objdump和backtrace的配合使用 :https://www.cnblogs.com/jiangyibo/p/9507555.html 

    代码:test.c

    一、命令addr2line:  addr2line -e '可执行文件名'  'dmesg打印的地址'

      编译的时候一定要加“-g”  添加调试信息:gcc -g test.c

      生成的可执行文件a.out一运行就会报错:Segmentation fault

      调用命令dmesg ,可以查看系统启动信息,其中最新的一行信息应该是段错误的描述信息,如下,ip后的地址就是发生段错误的地址。

      

      然后调用命令"addr2line -e a.out 0x8043db"就会打印出发生错误的文件和行号:

      

    二、core dumpe文件:程序崩溃时会保存程序运行时的内存信息

      先使用 ulimit -a 查看目前资源限制的设定:

      

      可查看到“core file size”的大小为0,我们设置成 200。

      然后再次 gcc -g test.c ,运行可执行文件a.out:

       

      ls可以看到当前目录下生成了“core”文件

      然后我们 gdb a.out:

      

      可以看到,一旦我们run了之后,程序就会停在发生段错误的地方。

      或者执行 gdb a.out core ,gdb会自动运行并停在发生段错误的地方。

      一般调用ulimit -c X 设置的文件大小都是临时有效,如果要设置永久有效,可以修改/etc/security/limits.conf 文件, 找到 * soft core 0,修改为* soft core unlimited保存,这样每次启动时都会去读取这个配置文件。

      

  • 相关阅读:
    138.安全退出的异常,要用throw 尽量不用exit(0)
    137.CPP自带异常
    136.异常的多态,父类对象,传递子类的引用或指针(地址)
    135.异常与类继承
    134.异常类的处理
    133.throw机制 抛出类类型
    132.try throw catch介绍
    CF1039D You Are Given a Tree
    CF576E Painting Edges
    【模板】并查集维护生成树
  • 原文地址:https://www.cnblogs.com/jiangyibo/p/8653720.html
Copyright © 2011-2022 走看看