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

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

  

linux下寻找段错误的方法的更多相关文章

  1. Linux下的段错误(Segmentation fault)

    Linux下的段错误(Segmentation fault) 段错误是指:访问了系统分配给程序的内存空间之外起的内存空间,比如: 访问不存在的地址 访问受系统保护的地址 访问了只读内存地址 内存访问越 ...

  2. Linux下的段错误(Segmentation fault)

    Linux开发中常见段错误问题原因分析 1 使用非法的内存地址(指针),包括使用未经初始化及已经释放的指针.不存在的地址.受系统保护的地址,只读的地址等,这一类也是最常见和最好解决的段错误问题,使用G ...

  3. Linux下调试段错误 (gdb,core,ulimit)

    Linux环境下经常遇到某个进程挂掉而找不到原因,我们可以通过生成core file文件加上gdb来定位. (1)首先 在makefile中要增加编译调试选项 -g,才可以利用下面的gdb来调试 gc ...

  4. 在Linux中调试段错误(core dumped)

    在Linux中调试段错误(core dumped) 在作比赛的时候经常遇到段错误, 但是一般都采用的是printf打印信息这种笨方法,而且定位bug比较慢,今天尝试利用gdb工具调试段错误. 段错误( ...

  5. Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches

    Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total used free shared ...

  6. Linux下Git和GitHub使用方法总结

    来源:Linux下Git和GitHub使用方法总结 1 Linux下Git和GitHub环境的搭建 第一步: 安装Git,使用命令 “sudo apt-get install git” 第二步: 到G ...

  7. linux下执行.sh文件的方法和语法

    linux下执行.sh文件的方法    .sh文件就是文本文件,如果要执行,需要使用chmod a+x xxx.sh来给可执行权限.       是bash脚本么   可以用touch test.sh ...

  8. Linux下清理内存和Cache方法

    暂时目前的环境处理方法比较简单: 在root用户下添加计划任务: */10 * * * * sync;echo 3 > /proc/sys/vm/drop_caches; 每十分钟执行一次,先将 ...

  9. 【转载】linux下的usb抓包方法

    1 linux下的usb抓包方法 1.配置内核使能usb monitor: make menuconfig                   Device Drivers -->        ...

随机推荐

  1. Java作业四

    1.先在一个包中编写第一个类ClassA,要求该类中具有四种不同访问权限的成员,再在另一个包中编写第二个类ClassB,并在该类中编写一个方法以访问第一个类中的成员.总结类成员访问控制的基本规则. p ...

  2. JS日期工具类(转)

    javascript Date format(js日期格式化) https://www.cnblogs.com/zhangpengshou/archive/2012/07/19/2599053.htm ...

  3. 牛客第三场多校 H Diff-prime Pairs

    链接:https://www.nowcoder.com/acm/contest/141/H来源:牛客网 Eddy has solved lots of problem involving calcul ...

  4. 究竟 javascript 错误处理有哪些类型?

    有时候,在自己封装的工具函数中,不传参或传入了错误类型的参数,也要适当的抛出一些错误以示警告:使用框架不正常情况下也会抛出错误,如果对错误一无所知,便无从下手调试.综合上述,了解错误的处理机制是多么必 ...

  5. pthread库实现一个简单的任务池

    pthread库实现一个简单的任务池 类关系图: 说明:         1:TaskManager类管理Task类,Task类是一个纯虚类;         2:ThreadManager类管理Th ...

  6. wxPython的使用--类似画板的界面

    # -*- coding: utf-8 -*-import wximport wx.lib.buttonsimport cPickleimport os class PaintWindow(wx.Wi ...

  7. Delphi 10.3实现Android App的动态权限申请

    Delphi 10.3 RIO发布近两个月,针对Google Play的要求,完美实现了对Android 8的支持,即对Android API Level 26的支持.这支持当中,最主要的得算是动态申 ...

  8. Debugging memory usage with kbmMW

    kbmMW的更高版本包含越来越多的功能,可用于通常的日志记录,审计,运行期发生异常时的堆栈跟踪以及现在的内存使用调试.这些功能实际上可用于任何应用程序,不仅限于基于kbmMW开发的多层应用系统.我已经 ...

  9. Python中列表、元组、集合、字典

    Python 列表(List) 列表是最常用的Python数据类型: 列表中的数据项不需要具有相同的类型: 列表也叫做数组,定义时使用[]: 通过下标访问列表中的元素,下标从 0  开始计数 列表的增 ...

  10. ubantu 安装redis

    安装Redis服务器端 ~ sudo apt-get install redis-server 安装完成后,Redis服务器会自动启动,我们检查Redis服务器程序 检查Redis服务器系统进程 ~ ...