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

news2024/9/23 23:26:37

目录

  • 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.coloradmin.cn/o/1552217.html

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

相关文章

文献学习(自备)

收官大作&#xff0c;多组学融合的新套路发NC&#xff01;&#xff01; - 知乎 (zhihu.com) Hofbauer cell function in the term placenta associates with adult cardiovascular and depressive outcomes | Nature Communications 病理性胎盘炎症会增加几种成人疾病的风险&a…

CAD自动轻量化,工业仿真动画快速制作

随着现代工业的蓬勃发展&#xff0c;制造业企业在产品宣传展示、工作流程讲解、机械维修维护等方面对展示形式提出了更高的要求。工业动画以其直观、生动的特点&#xff0c;能够深入剖析产品的结构、工作原理和操作流程&#xff0c;为企业带来了全新的宣传展示方式。 但是由于…

Obsidian插件-高亮块(Admonition)

在插件市场里面搜索Admonition并安装插件&#xff0c;就可以使用高亮块了。 添加高亮块 用法稍微有一些不同。按照下面的格式&#xff0c;输入Markdown就可以创建一个高亮块。 内容内容内容输入*ad-*会出现相应的类型可以选择

【QGIS从shp文件中筛选目标区域导出为shp】

文章目录 1、写在前面2、QGIS将shp文件中目标区域输出为shp2.1、手动点选2.2、高级过滤 3、上述shp完成后&#xff0c;配合python的shp文件&#xff0c;即可凸显研究区域了 1、写在前面 利用shp文件制作研究区域mask&#xff0c;Matlab版本&#xff0c;请点击 Matlab利用shp文…

超分之SwinIR官方代码解读

文章目录 一、解读SwinIR模型文件&#xff1a;network_swinir.py1. 带有相对为位置偏置的(W-MSA)2. STL(Swin Transformer)3. RSTB&#xff08;Residual Swin Transformer Block&#xff09;4. SwinIR&#xff08;主框架网络&#xff09; 二、解读SwinIR测试主文件&#xff1a;…

企业员工培训考试系统开发方案

一、引言 在当今知识经济时代&#xff0c;企业对员工的综合素质和专业技能有着越来越高的要求。为了适应这一趋势&#xff0c;构建一个全面而高效的企业员工培训考试系统变得尤为重要。该系统旨在通过提供多样化的培训课程和全面的考核机制&#xff0c;促进员工持续学习和能力…

结构体,联合体,枚举( 1 )

目录 前言 1.结构体 1.1结构体的声明 1.2结构体变量的创建和初始化 1.3结构体成员的访问字符 1.4结构体的内存大小 1.4.1对齐规则 1.5结构体传参 前言 在编程的世界里&#xff0c;数据结构的选择对于程序的效率和可读性有着至关重要的影响。不同的数据结构适用于不同的…

手写SpringBoot(二)之动态切换Servlet容器

系列文章目录 手写SpringBoot&#xff08;一&#xff09;之简易版SpringBoot 手写SpringBoot&#xff08;二&#xff09;之动态切换Servlet容器 手写SpringBoot&#xff08;二&#xff09;之动态切换Servlet容器 文章目录 系列文章目录手写SpringBoot&#xff08;二&#xff…

面向图像分类的视觉Transformer

一种面向对象分类的视觉Transformer&#xff0c;即ViT。该模型避免了卷积带来的归纳偏置&#xff0c;弥补了卷积神经网络在超长周期建模的不足。 1、DeiT&#xff08;data-efficient image transformer&#xff09;采用了知识蒸馏策略&#xff08;将大型模型的复杂知识&#xf…

工厂数据分析系统用这个开源库准没错

ScottPlot是一款简单易用、高度定制、性能卓越的.NET绘图库&#xff0c;支持跨平台操作。除提供标准图表类型外&#xff0c;还支持交互式操作&#xff0c;呈现生动的数据展示。在工厂数字化系统中&#xff0c;可用于生产数据可视化、设备监测和质量控制。无论用于科学研究、数据…

蓝桥杯 2022 省A 选数异或

一种比较无脑暴力点的方法&#xff0c;时间复杂度是(nm)。 (注意的优先级比^高&#xff0c;记得加括号(a[i]^a[j])x&#xff09; #include <iostream> #include <vector> #include <bits/stdc.h> // 包含一些 C 标准库中未包含的特定实现的函数的头文件 usi…

ThreadLocal和Synchronized的区别

目录 背景过程ThreadLocal什么是ThreadLocal&#xff1f;既然都是保证线程访问的安全性&#xff0c;那么和Synchronized区别是什么呢&#xff1f;ThreadLocal的使用TheadLocal使用场景原理高并发场景下ThreadLocal会造成内存泄漏吗&#xff1f;什么原因导致&#xff1f;如何避免…

JavaScript 权威指南第七版(GPT 重译)(四)

第九章&#xff1a;类 JavaScript 对象在第六章中有所涉及。该章将每个对象视为一组独特的属性&#xff0c;与其他对象不同。然而&#xff0c;通常有必要定义一种共享某些属性的对象类。类的成员或实例具有自己的属性来保存或定义它们的状态&#xff0c;但它们还具有定义其行为…

蓝桥杯省三保底代码——数显+按键功能实现

目录 前言 一、为什么能保底省三 二、数显模块的实现 1.数码管显示​编辑 1&#xff09;断码表 2&#xff09;位选 3&#xff09;段选 4&#xff09;扫描 2.菜单 三、按键功能的实现 1.按键扫描 2.菜单切换 四、完整代码演示 五、结语 前言 上一期介绍全家桶时&…

C语言分支循环语句详解

分支和循环语句是什么 在我们写程序的时候&#xff0c;总会遇到想一直循环执行某种语句的时候&#xff0c;这时候我们就要使用一种语句叫循环语句&#xff0c;或者带一些判断条件的语句&#xff0c;在C语言中提供了像这些的循环语句和分支语句 if else 语句 这是一种判断语句…

Model-Free Q-Learning for the Tracking Problem of Linear Discrete-Time Systems

Model-Free Q-Learning for the Tracking Problem of Linear Discrete-Time Systems&#xff0c;2024&#xff0c; Chun Li , Jinliang Ding , Senior Member, IEEE, Frank L. Lewis , Life Fellow, IEEE, and Tianyou Chai , Life Fellow, IEEE 对完全未知动力学的线性离散时…

远程桌面连接弹出“出现身份验证错误,要求的函数不受支持”解决办法

windows远程桌面连接,出现如图所示“出现身份验证错误&#xff0c;要求的函数不受支持”错误&#xff0c;无法连接。 解决办法&#xff1a; 打开本地组策略编辑器&#xff0c;按winr组合键输入gpedit.msc命令打开。 选择“计算机配置”--“管理模板”--“系统”--“凭据分配”…

OpenHarmony实战开发-Web组件的使用

介绍 本篇Codelab使用ArkTS语言实现一个简单的免登录过程&#xff0c;向大家介绍基本的cookie管理操作。主要包含以下功能&#xff1a; 获取指定url对应的cookie的值。设置cookie。清除所有cookie。免登录访问账户中心。 原理说明 本应用旨在说明Web组件中cookie的管理操作。…

【正点原子FreeRTOS学习笔记】————(7)任务调度

这里写目录标题 一、开启任务调度器&#xff08;熟悉&#xff09;二、启动第一个任务&#xff08;熟悉&#xff09;2.1&#xff0c;prvStartFirstTask () /* 开启第一个任务 */2.2&#xff0c;vPortSVCHandler () /* SVC中断服务函数 */ 三、任务切换&#xff08;掌握&#xff…

Deconstructing Denoising Diffusion Models for Self-Supervised Learning解读(超详细)

论文题目&#xff1a;Deconstructing Denoising Diffusion Models for Self-Supervised Learning 原文链接&#xff1a;https://arxiv.org/html/2401.14404v1 本文是对何凯明老师的新作进行的详细解读&#xff0c;其中穿插了一些思考&#xff0c;将从以下四个方面对这篇工作进…