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保存,这样每次启动时都会去读取这个配置文件。

      

  • 相关阅读:
    xpath 笔记
    实验四 决策树算法及应用
    实验三 朴素贝叶斯算法及应用
    机器学习 实验二 K-近邻算法及应用
    实验一 感知器及其应用
    JAVA学习路线
    实验三 面向对象分析与设计
    实验二 结构化分析与设计
    实验1:软件开发文档与工具的安装与使用
    ATM管理系统
  • 原文地址:https://www.cnblogs.com/jiangyibo/p/8653720.html
Copyright © 2011-2022 走看看