当前位置: 首页 > 编程日记 > 正文

通过gdb core dump方法查看程序异常时的堆栈信息

在Linux下可通过core文件来获取当程序异常退出(如异常信号SIGSEGV, SIGABRT等)时的堆栈信息。core dump叫做核心转储,当程序运行过程中发生异常的那一刻的一个内存快照,操作系统在程序发生异常而异常在进程内部又没有被捕获的情况下,会把进程此刻内存、寄存器状态、运行堆栈等信息转储保存在一个core文件里,叫core dump。core文件是程序非法执行后core dump后产生的文件,该文件是二进制文件,可以使用gdb、elfdump、objdump打开分析里面的具体内容。

产生core dump的可能原因:(1). 内存访问越界;(2). 多线程程序使用了线程不安全的函数;(3). 多线程读写的数据未加锁保护;(4). 非法指针;(5). 堆栈溢出。

查看操作系统是否开启产生core文件:输入命令:ulimit -c或ulimit -a, core file size为0,说明系统关闭了core dump,可通过命令:ulimit -c unlimited来打开,结果如下图所示,注:此设置只对当前终端有效,再打开一个新的终端时,输入ulimit -a,会发现core file size还是为0,若想始终有效,可在~/.bashrc文件最后加入命令:ulimit -c unlimited:

在Linux下执行程序时如果有提示”core dumped”信息,则会在当前目录下产生一个core文件,若没有产生,则可能core dump没有打开。缺省情况下,内核在core dump时所产生的core文件放在与执行程序相同的目录中,并且文件名固定为core,执行以下命令,可以将文件名修改为core.pid等形式,pid为执行当前程序的进程号,core_uses_pid中原始内容为0:

echo "1" > /proc/sys/kernel/core_uses_pid

测试代码main.cpp如下:

#include <stdio.h>
#include <iostream>namespace {void func() {const char* p = "hello";delete p;
}} // namespaceint main()
{fprintf(stdout, "test start\n");func();fprintf(stdout, "test finish\n");
}

依次执行如下命令,执行结果如下图所示,会在执行文件同一目录下产生core二进制文件:

g++ -g -o main main.cpp
./main

如果有多个程序产生core文件,或者同一个程序多次崩溃,就会重复覆盖同一个core文件。通过修改kernel参数,可以指定内核所生成的core dump文件的文件名,如设置core文件名形式为core_programname_time_pid,所有的core文件存放在/usr/core_log目录下,则在终端输入以下命令:

echo /usr/core_log/core_%e_%t_%p >> /proc/sys/kernel/core_pattern

通过gdb打开core文件:形式如下:$ gdb programname core,查看core dump时的堆栈信息,可以使用bt或where命令,如下图所示,注:在编译程序时加上-g选项才能够获取到具体的信息:

通过gdb help generate-core-file产生core文件,依次执行如下命令,执行结果如下图所示,产生的core.pid好像不如上面方法产生的core文件信息详细:

gdb main
help generate-core-file
start
generate-core-file

以上内容主要参考:

1. https://blog.csdn.net/u014403008/article/details/54174109

2. https://blog.csdn.net/ithomer/article/details/5945152

GitHub:https://github.com//fengbingchun/Messy_Test

相关文章:

日均350000亿接入量,腾讯TubeMQ性能超过Kafka

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;【导读】近日&#xff0c;腾讯开源动作不断&#xff0c;相继开源了分布式消息中间件TubeMQ&#xff0c;基于最主流的 OpenJDK8开发的Tencent Kona JDK&#xff0c;分布式HTAP数据库 TBase&#xff0c;企业级…

iOS应用版本更新(自动提醒用户)

在#import "AppDelegate.h" 文件中的application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 方法中调用检测结果 获得发布版本的Version 比较当前版本与新上线版本做比较 UIAlertView代理方法

Bash Shell脚本编程-变量知识

Shell:GUI CLI提供交互式接口&#xff1a;提高效率命令行展开&#xff1a;~ &#xff0c;{}命令别名&#xff1a;alias命令历史&#xff1a;historyGlobbing&#xff1a;*&#xff0c;&#xff1f;&#xff0c;[]&#xff0c;[^]命令补全&#xff1a;$PATH指定的目录下路径补全…

FFmpeg中可执行文件ffplay用法汇总

从https://ffbinaries.com/downloads 下载最新的4.1版本的windows 64位FFplay。目前linux下的只有3.2版本的。FFplay是一个由FFmpeg和SDL库组成的简单媒体播放器&#xff0c;它主要用作各种FFmpeg API的测试。 通过执行以下命令将FFplay信息重定位到ffplay_help.txt文件中便于…

用Go重构C语言系统,这个抗住春晚红包的百度转发引擎承接了万亿流量

整理 | 夕颜出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;11 月 20 日&#xff0c;百度的万亿流量转发引擎 BFE 登上了 GitHub Trending Top 3&#xff0c;今日 Star 已突破 270。事实上&#xff0c;这个曾经抗住 2019 年春晚抢红包的转发引擎早已于 2019 年夏在 G…

Swift3.0带来的变化汇总系列一——字符串与基本运算符中的变化

var string "Hello-Swift" //获取某个下标后一个下标对应的字符 char"e" //swift2.2 //var char string[startIndex.successor()] //swift3.0 var char string[string.index(after: startIndex)] //获取某个下标前一个下标对应的字符 char2 "t&qu…

vc+如何添加右键弹出菜单

2019独角兽企业重金招聘Python工程师标准>>> 一、创建新工程 二、编辑菜单资源 1、添加菜单 按“CtrlR”&#xff0c;双击“Menu”图标2、于菜单编辑器内编辑菜单四、添加代码&#xff08;红色部分&#xff09; void CCMenuView::OnUpdateShow(CCmdUI* pCmdU…

EMNLP 2019 | 大规模利用单语数据提升神经机器翻译

BDTC大会官网&#xff1a;https://t.csdnimg.cn/q4TY作者 | 吴郦军、夏应策来源 | 微软研究院AI头条&#xff08;ID:MSRAsia&#xff09;编者按&#xff1a;目前&#xff0c;目标语言端的无标注单语数据已被广泛应用于在机器翻译任务中。然而&#xff0c;目标语言端的无标注数据…

swift 3.0 json解析、字典转模型三种方案

swift3.0发布有一段时间了&#xff0c;发现很多朋友在swift3.0json解析上上遇到很多问题&#xff0c;我这边为大家提三种常见的json方案。 1.第一种是自带的字典转模型&#xff0c;自带的需要实现系统的setValue方法&#xff0c;然后自己还要实现dictToModel方法即可解析&…

海思3559A上编译GDB源码操作步骤及简单使用

1. 从http://ftp.gnu.org/gnu/gdb/ 下载最新稳定版8.3&#xff0c;即gdb-8.3.tar.gz&#xff0c;解压缩&#xff1b; 2. 在gdb-8.3目录下&#xff0c;创建一个build.sh脚本文件&#xff0c;内容如下&#xff1a; ./configure \--prefix"$PWD/install" \--targetaar…

Hibernate之继承映射

Hibernate的继承映射可以理解为两个持久化类之间的继承关系 例如老师和人之间的关系 持久化类 Person类 public class Person { private Integer id; privvate String name; private String sex; public Person (){} // 无参构造器 p…

AutoML未来可期,工程师的明天何去何从?

人工智能和机器学习建模专业技术人才紧缺&#xff0c;即使是高水平的人工智能专家&#xff0c;在大数据智能分析机器学习建模时&#xff0c;主要依靠人工经验&#xff0c;建模过程费时费力&#xff0c;缺少有效方法。为了解决这一突出问题&#xff0c;国内外出现了一种用机器学…

海思3559A上编译Valgrind源码操作步骤

注&#xff1a;按照以下步骤可以在海思板子上正常编译valgrind源码并生成valgrind可执行文件,但可能还不能在海思板子上正常使用。 1. 从http://valgrind.org/downloads/?srcwww.discoversdk.com 下载Valgrind 3.15.0即valgrind-3.15.0.tar.bz2&#xff1b; 2. 在valgrind-3…

Swift之SDWebImage第三方框架

在学习Swift过程中&#xff0c;最害怕的使用了OC的第三方框架 好不容易配置成功了&#xff0c;却出现了意外的Bug [UIImageView setImageWithURL:]: unrecognized selector sent to instance解决办法 第一次配置的时候&#xff0c;因为百度了教程&#xff0c;所以一次性成功…

文件分区格式化及挂载

创建一个5G的分区&#xff0c;文件系统为ext2&#xff0c;卷标为DATA&#xff0c;块大小为1024&#xff0c;预留管理空间为磁盘分区的8%&#xff1b;挂载至/backup目录&#xff0c;要求使用卷标进行挂载&#xff0c;且在挂载时启动此文件系统上的acl功能&#xff1b;在虚拟机创…

iOS开发swift版异步加载网络图片(带缓存和缺省图片)

iOS开发之swift版异步加载网络图片 与SDWebImage异步加载网络图片的功能相似&#xff0c;只是代码比较简单&#xff0c;功能没有SD的完善与强大&#xff0c;支持缺省添加图片&#xff0c;支持本地缓存。 异步加载图片的核心代码如下&#xff1a; func setZYHWebImage(url:NSStr…

2097352GB地图数据,AI技术酷炫渲染,《微软飞行模拟器》游戏即将上线

整理 | 若名出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;“只要是真实存在的地方&#xff0c;你都能抵达。”作为即将成为第一款将整个地球化作虚拟世界来供玩家玩的游戏&#xff0c;微软的《微软飞行模拟器》&#xff08;Microsoft Flight Simulator&#xff09;…

开源库nothings/stb的介绍及使用(图像方面)

GitHub上有个开源的stb库&#xff0c;Star数已过万&#xff0c;地址为https://github.com/nothings/stb&#xff0c;为何叫stb&#xff0c;是用的作者名字的缩写Sean T. Barrett。此库仅包含头文件&#xff0c;除stretchy_buffer.h外&#xff0c;其它所有文件以前缀stb开头&…

git stuff

git stuff trick git bash 无法标记复制解决办法 git bash窗口左上角图标点击,选择属性->选项->快速编辑模式 确定就ok了 Usual Commands 创建分支git branch branch-namegit push origin branch-name 删除分支git branch -r -d origin/branch-name 删除远程分支git push…

swift3.0之闭包

Swift 相比原先的 Objective-C 最重要的优点之一&#xff0c;就是对函数式编程提供了更好的支持。 Swift 提供了更多的语法和一些新特性来增强函数式编程的能力&#xff0c;本文就在这方面进行一些讨论。 Swift 概览 对编程语言有了一些经验的程序员&#xff0c;尤其是那些对多…

Linux下gdb attach的使用(调试已在运行的进程)

在Linux上&#xff0c;执行有多线程的程序时&#xff0c;当程序执行退出操作时有时会遇到卡死现象&#xff0c;如果程序模块多&#xff0c;代码量大&#xff0c;很难快速定位&#xff0c;此时可试试gdb attach方法。 测试代码main.cpp如下&#xff0c;这里为了使程序退出时产生…

一行Python代码能实现这么多丧心病狂的功能?(代码可复制)

最近看知乎上有一篇名为《一行 Python 能实现什么丧心病狂的功能&#xff1f;》&#xff08;https://www.zhihu.com/question/37046157&#xff09;的帖子&#xff0c;点进去发现一行Python代码可以做这么多丧心病狂的功能&#xff01;整理了一下知乎上这篇文章的内容&#xff…

一步一步写算法(之图结构)

原文:一步一步写算法&#xff08;之图结构&#xff09; 【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 图是数据结构里面的重要一章。通过图&#xff0c;我们可以判断两个点之间是不是具有连通性…

FFmpeg中可执行文件ffprobe用法汇总

从https://ffbinaries.com/downloads 下载最新的4.1版本的Windows 64位FFprobe&#xff0c;FFprobe用于从多媒体流中获取相关信息或查看文件格式信息&#xff0c;并以可读的方式打印&#xff0c;FFprobe可以作为一个命令行程序单独使用。 通过执行以下命令将FFprobe信息重定位…

CocoaPods导入的库其头文件导入的方法

尽管CocoaPods使用十分方便,但其导入的第三方框架还是要经过几步操作,才能供项目使用; 第一步:导入库 1>-在终端进入项目的根目录; 2>-输入:touch Podfile,则项目文件夹会创建一个空的Podfile,这时,你可以将你想要导入的库写在里面.如: platform :ios, 6.0 pod RESid…

Google、微软、阿里、腾讯、百度这些大公司在GitHub上开源投入排名分析 | CSDN原力计划...

扫码参与CSDN“原力计划”作者 | 村中少年来源 | CSDN原力计划获奖作品现在有越来越多的公司都参与了开源&#xff0c;其背后有各自的目的所在&#xff0c;姑且不予讨论。本文是从多个方面分析各大公司在开源上的投入情况。由于全世界绝大多数的开源项目都有发布到Github上&…

jquery源码解析:each,makeArray,merge,grep,map详解

jQuery的工具方法&#xff0c;其实就是静态方法&#xff0c;源码里面就是通过extend方法&#xff0c;把这些工具方法添加给jQuery构造函数的。 jQuery.extend({ ...... each: function( obj, callback, args ) { //$.each(arr , function(i,value){}),第三个参数用于…

swift实现提示框第三方库:MBProgressHUD

GitHud的下载地址是&#xff1a;https://github.com/jdg/MBProgressHUD/ 下载完成后&#xff0c;将MBProgressHUD.h和MBProgressHUD.m拖入已经新建好的Swift项目。因为使用的swift语言&#xff0c;所以拖入项目的时候会提示是否新建一个桥接objective-c与swift的文件&#xff…

这段Python代码让程序员赚300W,公司已确认!网友:神操作!

Python到底还能给人多少惊喜&#xff1f;笔者最近看到了这两天关于Python最热门的话题&#xff0c;关于《地产大佬潘石屹学Python的原因》&#xff0c;结果被这个回答惊到了&#xff1a;来源&#xff1a;知乎 https://www.zhihu.com/question/355880221笔者翻了翻那些回答&…

FFmpeg中可执行文件ffmpeg用法汇总

从https://ffbinaries.com/downloads 下载最新的4.1版本的Windows 64位FFmpeg&#xff0c;FFmpeg是一个快速的音频/视频转换工具&#xff0c;FFmpeg可以作为一个命令行程序单独使用。 通过执行以下命令将FFmpeg信息重定位到ffmpeg_help.txt文件中便于查看&#xff0c;其内容如…