调试Linux程序的时候,出现Segmentation Fault是最郁闷的事情了,程序代码量很大的时候,可能花很多时间都找不到出错原因。
       这里介绍一种对你调试Segmentation Fault很帮助的方法,可能能迅速帮助你找到出错的代码行。
       这种方法需要用到Linux提供的core dump机制:当程序中出现内存操作错误时,会发生崩溃并产生核心文件(core文件。使用GDB可以对产生的核心文件进行分析,找出程序是在什么时候崩溃的和在崩溃之前程序都做了些什么。
 
       首先,你的Segmentation Fault错误必须要能重现(废话…。
       然后,依参照下面的步骤来操作:
       (1无论你是用Makefile来编译,还是直接在命令行手工输入命令来编译,都应该加上 -g 项。
       (2一般来说,在默认情况下,在程序崩溃时,core文件是不生成的(很多Linux发行版在默认时禁止生成核心文件。所以,你必须修改这个默认项,在命令行执行:
       ulimit -c unlimited
       表示不限制生成的core文件的大小。
       (3运行你的程序,不管用什么方法,使之重现Segmentation Fault错误。
       (4这时,你会发现在你程序同一目录下,生成了一个文件名为 core.*** 的文件,即核心文件。例如,“core.15667”这样的文件。
       (5用GDB调试它。假设你的可执行程序名为test,则在命令行执行:
       gdb test core.15667
       然后可能会显示出一堆信息:
 
GNU gdb Fedora (6.8-27.el5)
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...
 
warning: Can't read pathname for load map: Input/output error.
…………………(中间还很多内容,此处省略……………………………
Loaded symbols for /usr/lib/libgpg-error.so.0
Core was generated by `./test'.
Program terminated with signal 11, Segmentation fault.
[New process 15668]
#0  0x0804c760 in thread _handler () at test.cpp:707
707                             CDev* cur_dev = *it_d;
 
然后我们输入并执行命令 bt :
(gdb) bt
 
就会得到类似于下面的信息:
 
#0  0x0804c760 in thread _handler () at test.cpp:707
#1  0x006b149b in start_thread () from /lib/libpthread.so.0
#2  0x0060842e in clone () from /lib/libc.so.6
 
于是,我们一眼就看出来了:程序是在第707行使用指针时出的问题。
怎么样,方便吧?

用GDB调试Segmentation Fault错误相关推荐

  1. onvif规范的实现:onvif开发常用调试方法 和常见的segmentation fault错误

    在前几篇中,虽然已经实现了rtsp视频流的对接,但是还要做的工作还非常多,onvif本来就是一个覆盖面非常广的一个协议,每一个功能都要填充大量的函数.而且稍不注意就会出现segmentation fa ...

  2. Linux内存显示错误,使用mmap读取内存的内容,出现“Segmentation fault”错误,请

    使用mmap读取内存的内容,出现"Segmentation fault"错误,请帮看看原因. 这个程序的目的是用于功能调试的,正在读取一块网卡使用的dma内存空间,想看看里面的数据 ...

  3. 由char* 引发的Segmentation fault错误

    在学习形参带const限定符时,意外遇到Segmentation fault的bug问题.C程序是在linux环境下运行. 在维基百科上是这样解释Segmentation fault,存储器区段错误( ...

  4. gdb php-fpm,使用 gdb 调试 php-fpm 异常错误

    相关资源下载GDB简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能. 问题 ...

  5. ubuntu Segmentation Fault错误原因

    一. 什么是"Segmentation fault in Linux" 所谓的段错误就是指访问的内存超过了系统所给这个程序的内存空间,通常这个值是由gdtr来保存的,他是一个48位 ...

  6. gdb定位Segmentation fault 问题

    1. gcc编译参数加上 -g gcc -g test -o test.c 直接gdb环境下运行test,异常时会打印所在代码行号,或者按照一下方式 2. 命令打开core dump 功能 $ uli ...

  7. centos使用yum时提示Segmentation fault错误的深入研究

    头一次用CentOS,结果就遇到了在用yum时出现了centos使用yum时提示Segmentation fault,这个错误的解决方法网上不少,但是我测试了一下发现不是那么回事,最后几经研究终于搞定 ...

  8. core dumped调试Segmentation fault

    使用ulimit -a指令查看core file size 的大小(在你运行程序目录下使用ulimit -a),如果为0则出现core dumped问题时无法生成core文件,输入ulimit -c ...

  9. Segmentation Fault 错误原因总结及解决方法

最新文章

  1. ecshop入门第一步,替换ecshop模板的显示图片
  2. dede调用头条非头条
  3. 2.6_Database Interface JDBC及驱动类型
  4. H5移动前端性能优化
  5. 智能合约重构社会契约(11)天德区块链智能合约系统
  6. PoolFormer解读
  7. python ssh shell交互_使用Paramiko在Python上用ssh实现交互式shell?
  8. 互联网晚报 | 2月22日 星期二 | 海底捞预告去年最高亏45亿元;奥迪一汽新能源汽车项目启动;英雄互娱更名“英雄游戏”...
  9. 6 日期字符串转日期_日期居然用字符串保存?我笑了
  10. Codeforces.1129E.Legendary Tree(交互 二分)
  11. SQL--查询无记录,显示默认一条记录
  12. Explaining Classifiers using Adversarial Perturbations on the Perceptual Ball论文解读
  13. c语言 实验6 数组实验报告,实验报告(实验六数组).doc
  14. live2d模型二次开发
  15. .bat文件和脚本文件
  16. 计算机双硬盘安装需要跳线吗,双硬盘安装的操作流程【详细步骤】
  17. 小程序坑录-wx.getLocation接口申请
  18. 钙通道阻滞剂/拮抗剂的应用
  19. 关于手机唯一识别码的研究meid和imei
  20. 计算机语言的学习方法

热门文章

  1. 如何让Python网络请求不走系统代*理*
  2. JAVA-三目运算符返回值规则
  3. note_idea中的maven命令操作
  4. android studio开关控件,Android studio实现滑动开关
  5. APPLE笔记本电脑软件测试,Apple Mac 实验室
  6. java web 常用工具类_Javaweb常用工具类及配置文件备份
  7. rem适配的浏览器_移动端网页布局适配rem方案小结
  8. 刷新table数据_关于数据透视表的刷新功能最值得了解的几个操作
  9. python数据包分析_python | 数据分析(一)- Numpy数据包
  10. 未能加载文件或程序集mysql.web.v20__关于MySQL Server影响ASP.NET网站使用的问题:未能加载文件或程序集MySql.Web.v20...