调试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行使用指针时出的问题。

怎么样,方便吧?

core文件如何查看和调试相关推荐

  1. g-gdb调试core文件

    文章目录 core文件 判读是否为core文件 打开系统 core dump 修改core文件的保存路径 gdb调试core文件 最近初步了解了一下core 文件,已经如何将gdb工具与core文件结 ...

  2. [Linux]core文件调试方法

    来源: shaovey的专栏 在程序不寻常退出时,内核会在当前工作目录下生成一个core文件(是一个内存映像,同时加上调试信息).使用gdb来查看core文件,可以指示出导致程序出错的代码所在文件和行 ...

  3. Linux环境崩溃生成core文件以及调试

    Windows环境崩溃问题可根据vs调试工具查看,Linux同样可以查看调用堆栈的信息,只是 需要更改Linux设置,使程序崩溃时候产生core文件.然后gdb调试即可. 1产生core文件方法 产生 ...

  4. Linux下core文件调试方法收藏

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明 http://littlewhitetwo.blogbus.com/logs/35544335.html 在程序不寻常退出时,内核会在 ...

  5. linux打开core文件,[转载]linux下core文件设置与查看

    程序异常推出时,内核会生成一个core文件(是内存映像以及调试信息).可以通过使用gdb来查看core文件,指示出导致程序出错的代码所在的文件和行数. 1.查看系统中core文件生成的开关是否打开 1 ...

  6. linux core文件的打开和分析

    1. core文件生成打开方式: ulimit -c unlimited echo "1" > /proc/sys/kernel/core_uses_pid 看下服务器上是否 ...

  7. core文件 linux,Linux 下core文件的使用

    转储文件(core dump)本来是在程序运行出错的时候产生的.转储文件记录了进程出错时的内存映像,以及进程执行的上下文环境,如寄存器的值等.它的主要用途是在程序运行崩溃时记录下进程的瞬时情况,从而为 ...

  8. linux core文件默认位置,linux下core文件

    linux下core文件 参考:http://www.cnblogs.com/li-hao/archive/2011/09/25/2190278.html 并整合其他参考资料 在程序不寻常退出时,内核 ...

  9. 什么是core文件?

    原文:[url]http://www.unixguide.net/linux/faq/07.13.shtml[/url] bug和操作系统或硬件的保护机制都会导致程序异常终止,操作系统会kill掉这些 ...

最新文章

  1. 第 十 天 : 添 加 硬 盘 和 分 区 挂 载 等
  2. CLion 2016.1新增Python、Swift支持,并改进了C++支持
  3. redis中KEYS替代命令
  4. 从头到脚说单测——谈有效的单元测试
  5. 浅谈关于nil和 null区别及相关问题
  6. Python+matplotlib一笔绘制红色五角星
  7. RAR 5.50 控制台使用记录
  8. apple_Apple WWDC 2018主题总结
  9. UE4(虚幻4)引擎下载与安装
  10. 小型数控雕刻机制作Arduino_微型CNC制作基于开源项目GRBL
  11. 软考高级系统分析师上午历年真题
  12. 服务器显示灰色怎么办,服务器远程桌面显示灰色
  13. varchar和varchar2的区别
  14. 闲鱼x-sign, x-mini-wua算法签名接口调用
  15. oracle 设置自增序列
  16. 各种转码(bytes、string、base64、numpy array、io、BufferedReader )
  17. QT界面,鼠标滚轮实现缩放问题
  18. appium java常用函数_AppiumLibrary常用关键字
  19. EPLAN2022——创建项目和图纸
  20. 67、INGeo:利用占用网格先验加速/减少迭代次数

热门文章

  1. 学习笔记 | NIPS 2021 regularization cocktail 调优的 MLPs 在表格数据上优于 GBDTs | Regularization is All Your Need
  2. 图解机器学习-l2约束的最小二乘学习法-matlab源码
  3. vs2022 c#调用interop.word 12.0版本也就是word2007实现首行缩进两个字符
  4. [Python从零到壹] 四十五.图像增强及运算篇之图像灰度非线性变换详解
  5. 从 几 个应用入手 了解为什么灵魂绑定代币将为 DeFi 带来大规模采用
  6. 即将公布的2020年10m分辨率全球土地利用数据(欧空局出品)
  7. 《Windows 8 权威指南》——2.9 轻松为Windows 8 Metro开始屏幕增加关机/重启等应用...
  8. 若依打包如何分离jar包和资源文件?
  9. Elasticsearch X-Pack许可证过期解决办法
  10. 【系统分析师之路】2016年系统分析师下午案例分析真题