详细分析Linux中的core dump异常(附 Demo排查)

目录

  • 1. 基本知识
  • 2. 进阶知识
  • 3. Demo
  • 4. 彩蛋

1. 基本知识

Core dump 是指在程序异常终止时,操作系统将程序的内存映像保存到磁盘上的一种机制。
在 Linux 系统中,core dump 提供了一种调试程序错误的重要方式,它记录了程序在崩溃时的内存状态,可以帮助开发人员定位问题

常见的 core dump 错误通常是程序在运行过程中发生了严重的错误或异常,导致操作系统强制终止了程序并生成了 core dump 文件。以下是一些常见的导致 core dump 的错误:

  • 段错误(Segmentation fault)
    程序访问了无效的内存地址,比如试图访问未分配的内存或者已经释放的内存
  • 空指针引用(Null pointer dereference)
    程序试图使用空指针(null pointer)访问内存中的数据时,会导致空指针引用错误
  • 内存访问越界(Out of bounds memory access)
    程序试图访问数组或者其他数据结构超出其边界范围的内存,就会发生内存访问越界错误
  • 使用已释放的内存(Use after free)
    程序试图在已经释放的内存地址上进行读取或写入操作时,就会发生使用已释放的内存错误
  • 栈溢出(Stack overflow)
    程序递归调用层数过深或者在栈上分配了过多的内存时,会导致栈溢出错误
  • 除以零(Division by zero)
  • 无效的指令或操作码(Invalid instruction or opcode)
    执行了不存在或无效的机器指令或操作码,会导致无效指令错误
  • 硬件故障或操作系统错误:如内存损坏、内核崩溃等情况

2. 进阶知识

一、怎么生成 core dump?

使用 ulimit 命令来控制生成 core dump 的条件,比如通过 ulimit -c unlimited 命令来设置允许生成任意大小的 core dump

先查看系統默认:ulimit -c 命令用于显示当前用户的 core dump 文件的大小限制。输出结果的含义如下:

  • 数字(以 KB 为单位),表示当前用户允许生成的 core dump 文件的最大大小限制
  • unlimited,表示当前用户允许生成任意大小的 core dump 文件
  • 0,表示当前用户不允许生成 core dump 文件

截图如下:

在这里插入图片描述

核心转储文件的大小通常受到操作系统或系统管理员配置的限制,可以使用 ulimit 命令来调整生成 core dump 文件的最大大小

二、core文件含义以及相关参数?

  • 程序崩溃时生成的二进制文件,其中包含了程序崩溃时的内存映像,以及当前的寄存器状态等信息
  • 一般存储在当前工作目录下,文件名通常为 core 或者 core.<pid>,其中 <pid> 是崩溃程序的进程 ID

相关的配置参数如下:

修改 /proc/sys/kernel/core_pattern 文件来配置 core dump 文件的生成路径和文件名格式
通过 ulimit -c 命令来设置 core 文件的最大大小限制

三、如何分析core dump文件?

使用 GNU Debugger (GDB) 等调试工具来分析 core dump 文件。通过加载 core 文件和对应的可执行文件,可以获取崩溃时的堆栈跟踪、变量值等信息,帮助定位程序错误
使用 gdb <executable> <corefile> 命令来加载可执行文件和 core 文件,并进入 GDB 调试环境

3. Demo

要排查 core dump,通常需要分析 core 文件以及程序的源代码。以下是排查 core dump 的一般步骤:

  1. 获取 core 文件
    程序发生 core dump 时,会在当前工作目录下生成一个 core 文件(除非已经配置了不同的路径)。首先要做的是获取这个 core 文件
  2. 分析 core 文件
    使用 GDB 命令查看堆栈跟踪、变量值等信息,从而确定程序崩溃的位置和原因
  3. 定位问题
    根据分析结果,确定程序崩溃的具体原因()内存访问错误、空指针引用、数据结构损坏等)
    分析代码,找出导致错误的代码段。
  4. 修复问题
    根据定位到的问题,修改程序代码以修复错误(涉及到修复内存管理错误、增加错误检查和处理逻辑等)
  5. 测试和验证
    各种测试技术,如单元测试、集成测试等,以确保程序的稳定性和可靠性

下面是一个简单的示例,演示如何排查一个导致 core dump 的 C 程序:

#include <stdio.h>void cause_crash() {char *ptr = NULL;*ptr = 'A';  // 尝试在空指针上进行写操作,导致段错误
}int main() {cause_crash();return 0;
}
  1. 编译该程序:gcc -o demo demo.c

  2. 执行程序,会触发 core dump:./demo

  3. 使用 GDB 分析 core 文件:gdb ./demo core

  4. 在 GDB 中可以使用命令 bt 查看堆栈跟踪:

(gdb) bt
#0  0x00005555555546e8 in cause_crash () at demo.c:6
#1  0x0000555555554701 in main () at demo.c:11

通过分析堆栈跟踪,可以发现问题出现在 cause_crash 函数的第 6 行,即空指针引用导致了段错误。在这个示例中,问题相对简单,修复方法可能是在写操作前添加对指针的空指针检查

4. 彩蛋

无法生成一个core-dump文件,有好些原因
在这里插入图片描述

一开始以为是被限制的文件大小或者不让他输出导致

查看core file size的大小
在这里插入图片描述
此处更改为无限制看看

在这里插入图片描述

后续发现此类问题还有一种原因:(挂载点的内存无可用,导致一直写入不进)

推荐阅读:【Linux】详细分析/dev/loop的基本知识 | 空间满了的解决方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/774238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeup_1132:问题 A: 最长公共子序列

目录 Problem DescriptionInputOutputSample InputSample Output原题链接解题思路代码实现&#xff08;C&#xff09; Problem Description 给你一个序列X和另一个序列Z&#xff0c;当Z中的所有元素都在X中存在&#xff0c;并且在X中的下标顺序是严格递增的&#xff0c;那么就…

伦敦银交易技巧:复合汇聚区域的应用

在伦敦银交易中我们需要掌握一些交易技巧&#xff0c;有了交易技巧我们才看得懂市场走势&#xff0c;进而作出适合我们的交易选择。下面我们就来讨论一个关于复合汇聚区域的伦敦银交易技巧。 相信很多人都学过支撑阻力位这个伦敦银交易技巧。一般来说&#xff0c;在伦敦银交易中…

ForkJoinPool在生产环境中使用遇到的一个问题

1、背景 在我们的项目中有这么一个场景&#xff0c;需要消费kafka中的消息&#xff0c;并生成对应的工单数据。早些时候程序运行的好好的&#xff0c;但是有一天&#xff0c;我们升级了容器的配置&#xff0c;结果导致部分消息无法消费。而消费者的代码是使用CompletableFutur…

C++初学者:如何优雅地写程序

我喜欢C语言的功能强大&#xff0c;简洁&#xff0c;我也喜欢C#的语法简单&#xff0c;清晰&#xff0c;写起来又方便好用。 一、为什么不用C语言写程序。 C语言用来做题目&#xff0c;考试研究是很方便的&#xff0c;但是用来写程序做软件&#xff0c;你就会发现&#xff0c…

Altair(澳汰尔) Radioss® 评估和优化动态载荷下的高度非线性问题

Altair&#xff08;澳汰尔&#xff09; Radioss 评估和优化动态载荷下的高度非线性问题 Radioss 是一款超前的分析解决方案&#xff0c;可评估和优化动态载荷下的高度非线性问题。它广泛应用于全球各行各业&#xff0c;能有效提高复杂设计的耐撞性、安全性和可制造性。 30 多…

PMBOK第八版、项目管理AI标准...PMI标准今年有这些进展

项目管理实践标准不断在演变&#xff0c;PMI作为项目管理领域的权威机构&#xff0c;一直致力于与全球各行各业的项目实践者一同探索和研究最新的行业标准&#xff0c;确保PMI标准符合全球项目专业人士当前能力建设与职业发展的需要。 今年以来&#xff0c;我们发布了一系列PM…

Python接口自动化pytest框架安装

1、创建一个requirements.txt文件夹 2、输入内容&#xff1a;如下图 pytest pytest-html pytest-xdist pytest-ordering pytest-rerunfailures pytest-base-url allure-pytest3、在terminal中输入安装命令&#xff1a;pip install -r requirements.txt 安装成功 4、在termina…

JavaScript混淆工具选择与使用指南

摘要 本文介绍了什么是js混淆工具&#xff0c;以及为什么需要使用js混淆工具。详细解释了js混淆工具的实现原理和作用&#xff0c;探讨了如何选择合适的js混淆工具&#xff0c;列举了几款常用的js混淆工具&#xff0c;并对它们的特点和适用场景进行了分析。最后总结了js混淆工…

HAL库 DMA +USART收发数据

DMA 首先&#xff0c;DMA相当于CPU的弱智小助手&#xff0c;不会复杂的逻辑运算&#xff0c;不占用CPU的时间&#xff0c;DMA就是一个数据搬运工。 串口收发数据&#xff0c;不外乎就是&#xff0c;CPU需要发数据时&#xff0c;将数据丢给DMA,完事就不管了&#xff0c;收数据是…

有关Kitchen-Rosenfeld角点检测的公式推导

第一次看到下面这个公式时,不太清楚怎么推导过来的 后面看了有关Kitchen-Rosenfeld的文章后,明白了 假设梯度的角度 θ \theta θ tan ⁡ θ = I y I x \tan \theta =\frac{I_y}{I_x} tanθ=Ix​Iy​​ 其中 I y I_y Iy​为y偏导, I x I_x Ix​为x偏导, I x x I_{xx} I…

PTA-练习9

目录 实验10-4 递归实现顺序输出整数 实验10-10 十进制转换二进制 实验10-6 递归求简单交错幂级数的部分和 实验11-1-2 输出月份英文名 实验11-1-6 指定位置输出字符串 实验11-1-8 查找子串 递归的基本思路&#xff1a; 推出递归的条件或者进入递归的条件每层递归需要执行…

html页面使用@for(){},@if(){},利用jquery 获取当前class在列表中的下标

基于以前的项目进行修改优化&#xff0c;前端代码根据List元素在html里进行遍历显示 原先的代码&#xff1a; 其中&#xff0c;noticeGuide.Id是标识noticeGuide的唯一值&#xff0c;但是不是从0开始的【是数据库自增字段】 但是在页面初始化加载的时候&#xff0c;我们只想…

JMeter 环境安装及配置

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

基于单片机防酒驾酒精检测报警系统装置设计

**单片机设计介绍&#xff0c;基于单片机防酒驾酒精检测报警系统装置设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机防酒驾酒精检测报警系统装置的设计旨在通过单片机技术和酒精传感器&#xff0c;实现对驾驶员酒…

labelme自动标注工具的安装和python代码修改

labelme嵌入SAM和EfficientSAM自动标注模型 目录: 1.labelme windows环境下安装python版本labelme 2.labelme.exe直接安装 3.labelme生成exe 4.labelme python代码修改 labelme自动标注使用方法 编辑/Create AI-Polygon 自动分割,直接生成分割图,标注为point,完成标注后…

【WiFi】WiFi QoS映射关系及抓包分析

WiFi Aliance认证测试对应图 RFC8325 ​​​​​​RFC 8325https://datatracker.ietf.org/doc/html/rfc8325 RFC 8325 – WiFi QoS Mappings | mrn-cciew (mrncciew.com)https://mrncciew.com/2021/09/14/rfc-8325-wifi-qos-mappings/ 802.11 UP和DSCP映射关系 802.11 UP …

大数据Hadoop入门04 ——【HDFS shell操作】

一、HDSF shell命令行解释说明 1、介绍 命令行界面&#xff08;英语: command-line interface&#xff0c;缩写: CLl)&#xff0c;是指用户通过键盘输入指令&#xff0c;计算机接收到指令后&#xff0c;予以执行一种人际交互方式。Hadoop提供了文件系统的shell命令行客户端:…

设置http响应报文

一、总结&#xff1a; (1)设置响应状态码&#xff1a; response.statusCode (2)设置响应状态描述&#xff1a; response.statusMessage() 使用的极少 (3)设置响应头信息&#xff1a; response.setHeader(头值,头名) (4)设置响应体&#xff1a; response…

28位驻华大使、公使参访苏州金龙 点赞刚刚全球发布的新V系大巴

3月26日下午&#xff0c;由外交部组织的“驻华使节团参访江苏”活动走进苏州金龙。来自28个国家和国际组织的驻华大使、公使参观了苏州金龙展厅&#xff0c;并试乘体验了苏州金龙全新V系大巴。外交部中国政府欧洲事务特别代表吴红波&#xff0c;外交部礼宾司、翻译司、非洲司、…

2024游泳耳机哪个牌子好?分析测评四大热门游泳耳机

随着科技的不断发展&#xff0c;游泳耳机已经成为游泳爱好者们在水中畅游时的最佳伴侣。近年来游泳耳机市场涌现出了众多品牌和产品&#xff0c;让人眼花缭乱。为了帮助大家挑选到最适合自己的游泳耳机&#xff0c;我们特意对市面上四大热门游泳耳机进行了详细的分析测评&#…