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

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. objectstate对象三种状态

    1.临时状态:new对象的过程,刚被创建出来,数据库中没有对应数据 2.持久状态:session.save(),数据库中有对应数据,session中也有对应数据 3游离状态:数据库中有对应数据,ses ...

  2. CSS--margin塌陷

    margin塌陷 解决方法: 1.给父级顶加上一条线,不太合适. 2.bfc block format context 设定bfc后,特定的盒子会遵循另一套语法规则,解决了margin塌陷 触发bfc ...

  3. SpringBoot入门示例

    SpringBoot入门Demo SpringBoot可以说是Spring的简化版.配置简单.使用方便.主要有以下几种特点: 创建独立的Spring应用程序 嵌入的Tomcat,无需部署WAR文件 简 ...

  4. Struts1的基础知识

    struts1.0的配置 在web.xml文件中的配置 <servlet> <!--配置ActionServlet类,一启动就创建该类对象--> <servlet-nam ...

  5. C/C++知识补充 (1)

    ● C++的圆括号运算符() 下列关于圆括号运算符的功能说法不正确的是(C) . A. 可用于强制类型转换 B 可用于类型构造 C 可用于类型声明 D 可用于函数调用 对大部分可重载的运算符来说,它既 ...

  6. linux系统安装mysql详细配置

    参考文章https://baijiahao.baidu.com/s?id=1584072431498789934&wfr=spider&for=pc https://www.5yun. ...

  7. Java的file类

    package IO; import java.io.File; import java.io.IOException; public class FileDemo01 { public static ...

  8. APC注入(Ring3)

    首先简单介绍一下APC队列和Alertable. 看看MSDN上的一段介绍(https://msdn.microsoft.com/en-us/library/ms810047.aspx): The s ...

  9. Linux文件系统命令 ls

    名称:ls 功能:查看文件列表 renjg@renjg-HP-Compaq-Pro--MT:~$ ls add-on.yaml Desktop examples.desktop meta-gnome3 ...

  10. 基于Nutch Solr等基于搭建一体化的数据抓取平台

    参考链接:https://www.ibm.com/developerworks/cn/opensource/os-cn-BigInsightsNutchSolr/