【Z】段错误Segment Fault定位,即core dump文件与gdb定位
使用C++开发系统有时会出现段错误,即Segment Fault。此类错误程序直接崩溃,通常没有任何有用信息输出,很难定位bug,因而无从解决问题。今天我们介绍core dump文件,并使用gdb进行调试,以此来定位段错误问题。此文同时用以备忘。
一、core dump
Core dump也称核心转储, 当程序运行过程中异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 称之为core dump文件。
系统默认不生成core dump文件,可以使用ulimit命令进行查看和设置。
查看。使用ulimit -c 或 ulimit -a命令查看core dump文件大小,如果core file size为0,则表示此时系统不会自动生成core dump文件,具体情况如图1所示。

图1
设置。我们可以通过ulimit-c unlimited命令,将core file size设置为不受限制unlimited,以此配置系统,使之可以自动生成coredump文件,具体操作如图2所示。

图2
二、段错误程序
我们编写一段简单的段错误程序,将之命名为core_test.cpp,代码如下。编译运行,系统自动产生了core文件,如图3所示。
#include<assert.h>
int main() {
assert(0);
return 0;
}

图3
三、core文件命名
在生产环境中,一台服务器上运行的程序较多,如果所有程序的core dump文件都自动命名为core,则可能造成一定的混乱。为此,我们可以通过设置,使得系统在为core dump文件命名时注明更多信息。
进程号。通过以下设置,可以使core dump文件名为core.pid形式。如图4所示,系统自动生成了core.3430文件。
echo "1" >/proc/sys/kernel/core_uses_pid

图4
更多信息。通过以下设置,可以使core dump文件名为core-exe-pid-time形式。如图4所示,系统自动生成了core-core_test-3465-1416037828文件。
echo “/coredir/core-%e-%p-%t” > /proc/sys/kernel/core_pattern/
图5
如果我们想进一步订制core文件的名称,可以根据表1的信息,进行设置。
表1
|
%% 单个%字符 %p 进程ID %u 进程实际用户ID %g 进程的实际组ID %s 导致本次core dump的信号 %t core dump的时间戳 (由1970年1月1日计起的秒数) %h 主机名 %e 程序文件名 |
四、使用gdb定位core dump错误
部分博友的博客中提到使用gdb –c core与where命令定位错误。或许是因为配置不同,我实际操作后发现如果使用gdb –c core,则获得的定位信息不具有可读性,具体如图6所示。

图6
最终,我使用gdb core_test core命令(其中core_test是发生dump的可执行程序,core是core file),进入gdb后,再使用where命令,可以定位到发生dump的代码位置,并且具有良好的可读性,具体如图7所示。

图7
参考
http://blog.csdn.net/ithomer/article/details/5945152
【Z】段错误Segment Fault定位,即core dump文件与gdb定位的更多相关文章
- Segment fault及LINUX core dump详解 (zz)
C 程序在进行中发生segment fault(core dump)错误,通常与内存操作不当有关,主要有以下几种情况: (1)数组越界. (2)修改了只读内存. (3)scanf("%d&q ...
- Segment fault及LINUX core dump详解
源自:http://andyniu.iteye.com/blog/1965571 core dump的概念: A core dump is the recorded state of the work ...
- 利用linux信号机制调试段错误(Segment fault)
在实际开发过程中,大家可能会遇到段错误的问题,虽然是个老问题,但是其带来的隐患是极大的,只要出现一次,程序立即崩溃中止.如果程序运行在PC中,segment fault的调试相对比较方便,因为可以通过 ...
- 利用linux信号机制调试段错误(Segment fault)【转】
转自:http://blog.csdn.net/ab198604/article/details/6164517 版权声明:本文为博主原创文章,未经博主允许不得转载. 在实际开发过程中,大家可能会遇到 ...
- 造成segment fault,产生core dump的可能原因
1.内存访问越界 a) 由于使用错误的下标,导致数组访问越界 b) 搜索字符串时,依靠字符串结束符来判断字符串是否结束,但是字符串没有正常的使用结束符 c) 使用strcpy, strcat, spr ...
- Linux下如何生成core dump 文件(解决segment fault段错误的问题)
Linux下的C程序常常会因为内存访问等原因造成segment fault(段错误),如果此时core dump 的功能是打开的,在运行我们的可执行程序时就会生成一个名为core的文件,然后我们就可以 ...
- linux core dump 文件 gdb分析
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIG ...
- 用gdb调试程序笔记: 以段错误(Segmental fault)为例
用gdb调试程序笔记: 以段错误(Segmental fault)为例[转] 1.背景介绍2.程序中常见的bug分类3.程序调试器(如gdb)有什么用4.段错误(Segmental fault)介绍5 ...
- linux C++ 莫名奇异的段错误(segmentation fault),无法调用其他函数
进来在linux下开发C++项目,遇到了非常奇怪的bug. 项目须要多线程实现,在写好代码后,每当执行到线程函数内部,当内部调用其他函数如printf.fopen等时就会提示段错误(segmentat ...
随机推荐
- 【随笔】win7下安装Apache服务器
1.首先下载64位的apache服务器httpd-2.4.10-win64.zip 2.解压,可以是默认路径,也可以自定义路径,我这里是E:/ 3.打开E:/Apache24/conf文件夹 4.随便 ...
- 从C语言的整数取值范围说开去
在ILP32中, char, short, int, long, long long, pointer分别占1, 2, 4, 4, 8, 4个字节,在 LP64中, char, short, int, ...
- 想熟悉PostgreSQL?这篇就够了
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由angel_郁 发表于云+社区专栏 什么是PostgreSQL? PostgreSQL是自由的对象-关系型数据库服务器,在灵活的BSD ...
- Python基础(3) - 数据类型:1数字类型
Python数据类型 数据类型 是否容器 是否可变 存储方式 数字 否 否 直接 字符串 否 否 直接 列表 是 是 顺序 元组 是 否 顺序 字典 是 是 映射 数字类型 整 型:1,234,0, ...
- 使用webpack2.0 搭建react.js项目
最近一段时间没有写react.js,发现webpack已经完全升级为2.0了,升级后导致以前的项目不能正常编译,只能重新实践一番 关于webpack2.0和1.x的区别概括起来就是tree shaki ...
- 深入理解JavaScript系列(45):代码复用模式(避免篇)
介绍 任何编程都提出代码复用,否则话每次开发一个新程序或者写一个新功能都要全新编写的话,那就歇菜了,但是代码复用也是有好要坏,接下来的两篇文章我们将针对代码复用来进行讨论,第一篇文避免篇,指的是要尽量 ...
- Redis 小结
一.redis简介 redis是一款基于C语言编写的,开源的非关系型数据库,由于其卓越的数据处理机制(按照规则,将常用的部分数据放置缓存,其余数据序列化到硬盘),大家也通常将其当做缓存服务器来使用. ...
- win8及以上2012 R2,virtualbox 5.0.20安装centOS6以上各种注意事项
问题: Virtul Box 安装增强功能时, 未能加载虚拟光盘VBoxGuestAdditions.iso 1.先下载适合win8及2012 R2以上系统适用的virtualbox最新版5.0.20 ...
- 在 Azure 上创建和链接 MySQL 数据库
本快速入门介绍了如何使用 Azure 门户创建并连接 MySQL 数据库.在本教程中完成的所有操作均符合 1 元试用条件. 开始之前如果您还没有 Azure 账户,可以申请 1 元试用账户 步骤1:创 ...
- js 表格合并单元格
5列 根据需要可添加 或 删除 strOneTemp strTwoTemp strThreeTemp strFourTemp strFiveTemp //合并单元格 this.mergeC ...