用gdb调试core dump文件

2023-10-27

尊重原创:http://blog.chinaunix.net/u2/83905/showart_2134570.html

 

 

在Unix系统下,应用程序崩溃,一般会产生core文件,如何根据core文件查找问题的所在,并做相应的分析和调试,是非常重要的。

什么是Core Dump?
Core的意思是内存, Dump的意思是扔出来, 堆出来.开发和使用Unix程序时, 有时程序莫名其妙的down了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考.
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump.

为什么没有core文件生成呢?

有时候程序down了, 但是core文件却没有生成. core文件的生成跟你当前系统的环境设置有关系, 可以用下面的语句设置一下, 然后再运行程序便成生成core文件.
ulimit -c unlimited
core文件生成的位置一般于运行程序的路径相同, 文件名一般为core.进程号


当获得了core文件以后,就可以利用命令gdb进行查找,参数一是应用程序的名称,参数二是core文件
如: gdb [...]xmsd [...]/xmsd_PID1065_SIG11.core

然后输入bt或者where找到错误发生的位置和相应的堆栈信息。就可知道发生错误时的函数调用关系,然后可以使用up或者down查看上一条和下一条具体详细信息。这样便能对问题进行大概定位,然后看源代码,进行分析。


eg:


(gdb) where

#0 0x0804ff8c in memory_error (self=0x818ca10, ptr=0x82e5a94, msg=0x813efb2 "memory_free") at /aston/h_debit/XMS/bin/XMS_1_15_11/src/xms/lib/memory.c:140

#1 0x080504cd in memory_free (ptr=0x82e5a94) at /aston/h_debit/XMS/bin/XMS_1_15_11/src/xms/lib/memory.c:275

#2 0x080505ac in xml_free (ptr=0x82e5a94) at /aston/h_debit/XMS/bin/XMS_1_15_11/src/xms/lib/memory.c:316

#3 0xb7edb589 in xmlFreeNode () from /home/zhenbo/workstation/DEVSUITE-HEAD/debug/lib/libxml2.so

#4 0x082b2228 in ?? ()

#5 0x08097031 in interfacehandler_set (self=0x82bd74c, correlator=-4, conf=0x0, cb=0x82b0aac) at /aston/h_debit/XMS/bin/XMS_1_15_11/src/interfaces/interfacehandler.c:150

#6 0x0805e897 in configurable_set (self=0x82bd74c, correlator=-4, conf=0x0, cb=0x82b0aac) at /aston/h_debit/XMS/bin/XMS_1_15_11/src/xms/xms/configurable.c:85

#7 0x0805e73c in configurable_flush (self=0x82bd74c, correlator=-4, cb=0x82b0aac) at /aston/h_debit/XMS/bin/XMS_1_15_11/src/xms/xms/configurable.c:67 #8 0x08100ddc in system_complete (self=0x82b0aac, correlator=-5, code=0

如果之前不能准确定位错误的位置,则从以上信息可以知道,可从函数interfacehandler_set入手进行分析,其中的参数和行号都已经给出了。

 

 

 

 

 

 

 

1. 前言:
有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的.
但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们的调试变得困难起来.

2. gdb:
有一种办法是, 我们用gdb的step, 一步一步寻找.
这放在短小的代码中是可行的, 但要让你step一个上万行的代码, 我想你会从此厌恶程序员这个名字, 而把他叫做调试员.
我们还有更好的办法, 这就是core file.

3. ulimit:
如果想让系统在信号中断造成的错误时产生core文件, 我们需要在shell中按如下设置:
#设置core大小为无限
ulimit -c unlimited
#设置文件大小为无限
ulimit unlimited

这些需要有root权限, 在ubuntu下每次重新打开中断都需要重新输入上面的第一条命令, 来设置core大小为无限.

4. 用gdb查看core文件:
下面我们可以在发生运行时信号引起的错误时发生core dump了.
发生core dump之后, 用gdb进行查看core文件的内容, 以定位文件中引发core dump的行.
gdb [exec file] [core file]
如:
gdb ./test test.core
在进入gdb后, 用bt命令查看backtrace以检查发生程序运行到哪里, 来定位core dump的文件->行.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用gdb调试core dump文件 的相关文章

  • /sys/device/ 和 dmidecode 报告的不同 CPU 缓存大小

    我正在尝试获取系统中不同缓存级别的大小 我尝试了两种技术 a 使用 sys device 中的信息 这是输出 cat sys devices system cpu cpu0 cache index1 size 32K cat sys dev
  • C# 写入文件的性能

    我的情况概述 我的任务是从文件中读取字符串 并将它们重新格式化为更有用的格式 重新格式化输入后 我必须将其写入输出文件 这是必须完成的操作的示例 文件行示例 ANO 2010 CPF 17834368168 YEARS 2010 2009
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 拒绝访问特定目录中的特定文件类型

    对于某些应用程序 用户可以上传自己的文件 由于这可能是非常大的文件 因此他们可以通过自己的 FTP 客户端上传这些文件 当然 我不希望他们上传一些可以访问服务器上所有其他文件的 PHP 文件 我想要防止这种行为的方法之一是拒绝仅访问这些文件
  • 无法启动 MySQL 服务器 - 控制进程退出并出现错误代码

    我的 mysql 服务器停止后无法启动 命令使用 sudo etc init d mysql restart Error 重新启动 mysql 通过 systemctl mysql serviceJob for mysql service
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li
  • 如何才能将 TCP 连接返回到同一端口?

    机器是 RHEL 5 3 内核 2 6 18 有时我在 netstat 中注意到我的应用程序有连接 建立了 TCP 连接本地地址 and 国外地址是一样的 其他人也报告了同样的问题 症状与链接中描述的相同 客户端连接到本地运行的服务器的端口
  • Perl 和 Unix 如何以相同的顺序对 Unicode 字符串进行排序?

    我正在尝试获取 Perl 和 GNU Linuxsort 1 程序就如何对 Unicode 字符串进行排序达成一致 我在跑sort with LANG en US UTF 8 在Perl程序中我尝试了以下方法 use Unicode Col
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 如何使用 JSch 将多行命令输出存储到变量中

    所以 我有一段很好的代码 我很难理解 它允许我向我的服务器发送命令 并获得一行响应 该代码有效 但我想从服务器返回多行 主要类是 JSch jSch new JSch MyUserInfo ui new MyUserInfo String
  • ALSA:snd_pcm_writei 调用时缓冲区不足

    当运行我最近从灰烬中带回来的旧程序时 我遇到了缓冲区不足的情况 该程序将原始声音文件完全加载到内存中 2100 字节长 525 帧 并准备 ALSA 进行输出 44 1khz 2 通道 有符号 16 位 if err snd pcm set
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Rabbitmq 忽略 Ubuntu 12 上的配置

    I have rabbitmq server从系统包安装乌班图12 无论我做什么 它似乎都会忽略任何配置文件 网络上的所有内容都表明服务器正在寻找 etc rabbitmq rabbitmq conf 但即使我创建该文件 服务器也报告没有配
  • 安装 scrapy 0.22 时出错(在 Ubuntu 12.04 上):“gcc”失败,退出状态为 1

    尝试使用 pip 从命令行安装 Scrapy 时 sudo pip install scrapy我收到以下错误 error command gcc failed with exit status 1 查看错误输出中的几行 我发现在尝试安装
  • 从数据库和文件系统中删除文件

    我有一个表引用我们网络上共享位置中的文件 将文件路径存储在数据库中 我有一个按钮需要从数据库中删除记录并从文件系统中删除文件 foreach var report in reports string filePath report Repo
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro

随机推荐

  • 【吐血整理】那些让你起飞的计算机基础知识:学什么,怎么学?

    作者 帅地 来源公众号 苦逼的码农 我公众号里的文章 写的大部分都是与计算机基础知识相关的 这些基础知识 就像我们的内功 如果在未来想要走的更远 这些内功是必须要修炼的 框架千变万化 而这些通用的底层知识 却是几乎不变的 了解了这些知识 可
  • 1.使用MySQL创建student表操作_实验环境Windows-SQLyog

    Student学生表 Name English Math Computer zhangsan 69 86 77 lisi 55 100 88 1 根据上面给出的表格 利用MySQL5 6设计出student学生表格 创建表的语法 CREAT
  • 项目集成支付宝报错:调试错误,请回到请求来源地,重新发起请求。 错误代码invalid-app-id错误原因:无效的ApplD参数

    问题 项目集成支付宝报错 调试错误 请回到请求来源地 重新发起请求 错误代码invalid app id错误原因 无效的ApplD参数 详细问题 笔者按照支付宝沙箱支付快速集成版进行操作 操作完成访问所集成的支付宝 页面如下 解决方案 修改
  • java math类随机数_Java—Math类和随机数类

    一 Math类 主要封装算数运算的静态方法 定义 Math是没有构造方法的 java语言中提供了一个执行数学基本运算的Math类 Math类包括常用的数学运算和一些数学函数 还提供了一些常用的常量 PI E等 Math类中提供了许多数学函数
  • MySql取消密码强度验证

    一 修改MySql配置文件 my cnf 一般情况下 MySql的配置文件 my cnf 会在 etc 目录下 如果没有 可以使用以下命令查找位置 sudo find name my cnf 编辑配置文件 sudo vi etc my cn
  • 不要迷恋我,虽然我利用Python来耍植物大战僵尸

    目录 前言 游戏的安装 思路 一句话总结 大概的思路 实战 确定修改哪一款游戏的数据 代码 地址的寻找 视频教程 修改数据 代码 效果 完整的源码 前言 大家好 我叫善念 上篇文章我许了一个愿 就是想让大家多多关注我 然后我的粉丝就蹭蹭的涨
  • python PIL open 无法打开 webp,jpeg等图像 ,报错 PIL.UnidentifiedImageError: cannot identify image file

    问题 使用 PIL Image open 能正常打开大部分图像文件 但是webp格式的图像无法打开 有一些jpg png图像也无法打开 报错 PIL UnidentifiedImageError cannot identify image
  • 简析:阿里巴巴最近20个月的拆分史

    author skate time 2013 02 20 在不到20个月的时间里 阿里巴巴集团接连发生几轮分拆 还伴以将云OS剥离出阿里云这样的突发动作 在大公司界 无论是传统公司还是互联网公司 这种情况是罕见的 一般公司 经不起这样频繁的
  • c++基础(华清远见学习之星)

    最近刚接触c 与c还是有很多不同的 如果有其写c的操作 头文件用
  • Linux查看CPU支持的指令集

    gcc march native Q help target grep march 或者 cat proc cpuinfo Intel的CPU 可以去官网查看能支持什么指令集 https ark intel com content www
  • STM32F103基于W5500实现Modbus简单TCP通信

    文章目录 一 Modbus TCP协议 1 查询报文 2 响应报文 二 从机代码 1 初始化从机网络 2 简单响应函数 3 main函数循环等待连接 三 效果 四 总结 五 源码 一 Modbus TCP协议 功能码 作用 01 读取线圈状
  • 正则表达式和通配符的区别

    http www eetop cn blog html 65 554165 26125 html http blog csdn net whxlovehy article details 6052366 Explain 1 1 正则表达式是
  • Python Selenium/WebDriver 操作手册新版

    写在前面 本文为个人整理手册 有错误的地方欢迎指正 参考链接较多 重点参考 侵权删 什么是Selenium 通俗的解释 引用 Selenium是一个Web的自动化测试工具 最初是为网站自动化测试而开发的 类型像我们玩游戏用的按键精灵 可以按
  • Hadoop集群搭建记录

    本文目录 写在前面 写在前面 本系列文章索引以及一些默认好的条件在 传送门 因为课程需要 我们要进行Eclipse的安装操作 eclipse需要是CentOS下的 网址在 传送门 在出现的页面中 根据自身的机型选择合适的类型 博主为x86
  • 基础三 * 下 【vim 编辑器】 【管道】【文件内容浏览命令】

    目录 vim 编辑器 管道 文件内容浏览命令 练习 vim 编辑器 前言须知 1 vim 是个啥 其实 vim 类似于 windows 上的记事本 能够编辑 保存 复制 粘贴 搜索 替换等等
  • AI开放平台能力集合

    背景 随着AI技术的兴起及其逐步在各业务领域落地 越来越多的公司将其业务中使用到的底层AI能力开放出来 通过付费的模式提供给不具备建立AI能力的公司使用 AI技术包含非常多不同的方向 如文档识别 人脸人体识别 NLP语义分析以及大数据挖掘等
  • Linaro 作为白金会员加盟 Zephyr 项目

    转载自 https www zephyrproject org linaro joins zephyrtm project platinum member 作者 Zephyr 本文地址 https linux cn article 7817
  • Mybatis-Plus:实现自定义SQL

    目录 1 简介 2 自定义SQL具体实现 2 1 注解SQL 2 2 Wrapper传参 注解SQL 2 3 Wrapper传参 xml文件SQL 2 4 正常传参 XML文件SQL 3 总结 1 简介 Mybatis Plus 以下简称M
  • mybaties-plus 代码成器使用笔记

    1 简介 MyBatis Plus Generator 可以生成 Controller Service Mapper Entity 也支持自写 SQL 的 mapper 步骤 1 数据库中创建相应表 2 引入maven依赖 freemark
  • 用gdb调试core dump文件

    尊重原创 http blog chinaunix net u2 83905 showart 2134570 html 在Unix系统下 应用程序崩溃 一般会产生core文件 如何根据core文件查找问题的所在 并做相应的分析和调试 是非常重