在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

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

  1. 嵌入式linux应用程序崩溃,嵌入式Linux gdb core dump快速定位程序crash问题

    指定生成 core dump 文件: echo "/tmp/core-%e-%p-%t" > /proc/sys/kernel/core_pattern ulimit -c ...

  2. android 分析堆栈信息,分析android异常时的堆栈信息

    android framework异常时会打印如下log,分析往往无从下手: 24422 08-17 15:09:02.212 I/DEBUG   (   52): *** *** *** *** * ...

  3. gcore 获取程序core dump file 但程序不用退出,gdb 分析core

    转载地址: http://hi.baidu.com/widebright/item/e94ea43535711f4a3075a1d0 本文包含如下部分内容 1. Linux内核里面生成的core fi ...

  4. linux下怎么查看程序异常,如何检测、定位linux程序异常

    作为linux开发,在工作中或者面试的时候经常会遇到怎么检测程序异常的问题,下面对此作一个总结. 0. 查看程序日志.项目更新日志,发现可疑的地方 使用linux查看内存cpu指令,top.ps初步看 ...

  5. Core Dump 核心转储-进程异常分析jmap命令

    Core Dump 核心转储 一.简介 程序运行过程中异常退出定位,查看到程序异常时的所有信息,变量值.栈信息.内存数据,程序异常时的运行位置(甚至记录代码行号)等等 jdk/bin目录下 ./jma ...

  6. Python 异常捕获打印堆栈信息

    Python 异常捕获打印堆栈信息 对于之前只接触过Java没有接触过Python的工程师而言,或多或少会有一些语法上的困惑.本文仅限小白 异常捕获语法: try:正常代码块........ exce ...

  7. linux下怎么查看程序异常,linux程序莫名异常怎么查

    内存异常经常导致程序出现莫名其妙的错误,往往很难查证,本文介绍在linux下的各种常见内存异常的查证工具和方法. 1 访问空指针/未初始化指针/重复释放内存 对于像访问空指针.未初始化指针(非法地址) ...

  8. 软件崩溃时 将堆栈信息写入dump文件, 并使用VS2010定位程序崩溃位置

    Windows下有三种生成dump文件的方式: 1.通过任务管理器和注册表:2.WinDbg抓取:3.程序中加入存储Dump的代码 具体生成方法参看:Windows下dump文件生成与分析 本文详细介 ...

  9. java log.error_Logger.error打印错误异常的详细堆栈信息

    一.问题场景 使用Logger.error方法时只能打印出异常类型,无法打印出详细的堆栈信息,使得定位问题变得困难和不方便. 二.先放出结论 Logger类下有多个不同的error方法,根据传入参数的 ...

最新文章

  1. 为什么程序员加班有罪?
  2. Android Studio 如何导出和导入自己的常用设置,避免重复制造轮子。加快开发速度...
  3. [转]C/C++语言void及void指针深层探索
  4. 三层交换解决了VLAN之间的通信问题
  5. Python requests介绍之接口介绍
  6. 【Python3爬虫】破解时光网登录加密参数并实现模拟登录
  7. 《老子五千言》 ——《道德经》帛书版(珍藏原著)
  8. “设计大赛”WBS结构图
  9. Python:实现binomial distribution二项分布算法(附完整源码)
  10. 网络准入控制(NAC)部署经验
  11. 这位印度小哥,拯救了山河日下的微软帝国
  12. 国际学术论文写作个人总结-引言(Introduction)部分
  13. table和div的比较
  14. 《精读 Mastering ABP Framework》教程发布
  15. Adversarial Image Registration with Application for MR and TRUS Image Fusion
  16. 后端php项目和数据库启动
  17. vue动态添加下划线
  18. 基于javaweb的超市收银管理系统(java+ssm+html+mysql)
  19. Input Method of Win32 System
  20. 关闭iframe时同时关闭后台SignalR的定时推送(关闭websocket连接,关闭推送线程)

热门文章

  1. keras 的 example 文件 lstm_text_generation.py 解析
  2. Linux那些事儿之我是Sysfs(1)sysfs初探
  3. populate_dir
  4. pcl_filters模块api代码解析
  5. 设置VSCode终端命令行清除快捷键Ctrl+K或Ctrl+L
  6. Ubuntu 14.04 64bit上编译安装MonaServer并测试
  7. SketchUp Pro 2021基础入门学习视频教程
  8. 从一致性hash到ceph crush算法演进图谱(持续更新)
  9. 引用-ZIGBEE-ZSTACK网络配置相关问题
  10. scala构建工具sbt使用介绍