【Linux】详解core dump文件的作用以及用法&&ubuntu20.04下无法形成core dump文件的解决办法

Linux CoreDump机制详解 当用户程序运行过程中发生异常, 程序异常退出时, 由Linux内核把程序当前的内存状态信息(运行时的内存,寄存器状态,堆栈指针,各种函数调用堆栈信息等)存储在一个core文件中, 这个过程称作coredump. 阅读详情
AI摘要

本文讲述了在Ubuntu20.04系统中遇到的无法生成coredump文件的问题,介绍了core与term的区别,coredump文件的作用,以及如何在默认关闭情况下开启和自定义coredump文件的设置。特别提到在/proc/sys/kernel/core_pattern路径下的设置对coredump命名的影响。

说明

        从第三大点开始讲解ubuntu20.04下无法形成core dump文件的解决办法。

一、core与term的区别

        在之前讲过的信号中,终止进程的信号的动作分为两种,一种是core,一种是term。term(全称termination)是直接终止进程;而core的动作同样是终止进程,但是core在终止进程的同时会给我们形成core dump文件。

二、core dump文件的作用

         当进程收到动作为core的信号发生异常退出时,将进程在内存中的核心数据(主要是与调试有关的核心数据)转储到磁盘中形成core dump文件,core dump文件可以帮助程序员定位到程序为什么退出以及是在哪一行退出的。它包含了崩溃时的内存状态信息,如变量值、函数调用栈等。core文件可以用来检查内存泄漏,因为它包含了程序在崩溃时的内存状态信息,通过分析可以找出哪些内存没有被释放。有时候程序崩溃是难以复现的,生成core dump文件可以帮助程序员在不同的环境中重现问题,以便更好地调试。利用core dump文件调试也叫做事后调试。

三、开启core文件功能

在Linux系统上,core dump文件的生成默认是关闭的。

默认core文件的大小为零,也就是关闭的。 

下面是core文件生成的打开方法。

 ulimit -c 10240(设置core dump文件的文件大小,单位为kb)

         设置完成以后,我们就可以看到core文件的大小变为我们设置的大小了。下面我写一段测试代码:

#include <iostream>
using namespace std;

int main()
{
    int a = 10;
    a /= 0;
    return 0;
}

         此时我已经设置了core文件的大小,core dumped功能已经打开,可在当前目录下却没有形成core文件:

这是在ubuntu20.04系统下会产生的结果,下面我会讲解解决的方法。

三、ubuntu20.04下无法形成core文件的解决办法

3.1、解决方法

需要在root用户或者是用sudo提权执行这条指令:

sudo bash -c "echo core > /proc/sys/kernel/core_pattern"

        在ubuntu20.04这个系统下,/proc/sys/kernel/core_pattern路径下的这个core_pattern文件的内容默认是空的,执行sudo  "echo core > /proc/sys/kernel/core_pattern"这条指令是用来设置内核的 core dump 模式的。当你设置core_pattern为 "core",系统会在程序崩溃并产生 core dump 时,将 core dump 文件命名为core而不是默认的带有进程 ID 和其他信息的文件名。 也就是说,形成的core dump文件的名称是可以自定义的,但我还是建议将core dump文件的名称就设置为core。

先设置core dump文件的大小:

执行该条指令,运行我的可执行程序,发生除0错误,这次就会形成core dump文件了。 

 core可以帮助调试,直接帮我们指定错误在第几行:

2、向core_pattern文件中写入内容时的细节

        这也是我在写入core到core_pattern文件中所遇到的问题。刚开始我是用vim向core_pattern文件中写入core的,但在保存退出的时候遇到了下面这个问题:

        原因是因为操作系统proc目录中的文件并不是实际的文件。/proc目录在Linux系统中是一个伪文件系统,它只存在于内存中,并不占用实际的磁盘空间。这个目录下的文件并不是真正的文件和目录,而是内核运行时的一些信息、状态和参数的接口。这些文件通常用于查看和修改内核参数、系统状态、硬件信息等。

        由于/proc目录下的文件并不对应实际的磁盘上的数据,因此它们不能被常规的文本编辑器(如vim)进行编辑。实际上,当你尝试使用vim或其他文本编辑器打开并修改/proc下的文件时,你实际上是在尝试修改内核的状态或参数,而这是不被允许的。所以修改/proc下的文件时更常见的是使用shell命令。

四、总结

        看了有的文章说禁用apport功能也能正常在当前目录下形成core dump文件,但是在ubuntu20.04这个系统下我已经尝试过了,并不能解决这个问题,大家也可以尝试一下这个方法看看。

【代码调试】Linux coredump分析 万一程序比较糟糕,指定的coredump文件大小限制,导致文件记录不到或者缺失怎么办。此时,一劳永逸的办法就是不限制coredump文件大小;执行设定,设置时需要root权限。以上方式都是在终端临时设置开启coredump记录功能,系统重启后失效,很显然这不是理想的方法。理想的方法是修改配置文件,使得系统一直开启coredump记录功能,至少在项目开发测试阶段是需要开启的。原则上,软件发布后也应该记录,出现问题后能够有追溯和分析问题的依据。在文件增加。 阅读详情

相关推荐

arm-linux-gdb在调试core dump文件的用法

1·关于gdb调试 在网上能够搜索到很多关于gdb调试以及gdb命令的使用,在调试程序的时候非常的方便,但是对于嵌入式Linux上应用程序开发呢?可能很多都是在使用“printf”大法,的确printf可以解决问题,但是如果我们能够精确定位出错问题的代码岂不是更好? 然后再嵌入式linux上,可能你会使用arm-linux-gdb做一个stub来进行调试,由于在实际情况中,很多程序是放在脚

ywyywyywy的专栏 2083

Linux开启coredump功能

Linux离调试之coredump功能开启

wojiaxiaohuang2014的博客 4638

Arduino程序设计(十)8×8 共阴极LED点阵显示(MAX7219)

本文主要介绍8×8 LED点阵显示实验,分别是:1、介绍MAX7219点阵模块;2、点阵显示部分图形;3、点阵显示数字 0~9 及 26 个英文字母。1、通过上述两个点阵实验,了解了8*8点阵显示的基本原理;2、通过SPI通信控制点阵显示,学会了Arduino用SPI通信方式控制外设。

Alice的博客 1万+

coredump详解

coredump

holly的专栏 1万+

Waymo数据集里的隐藏彩蛋:5个激光雷达数据融合实战(附Python代码)

本文深入解析Waymo数据集中5个激光雷达的数据融合技术,提供Python实战代码,帮助开发者掌握多传感器协同工作的关键方法。通过时间同步、坐标转换和运动补偿等技术,实现高精度3D场景重建,提升自动驾驶系统的环境感知能力。

weixin_30399821的博客 80

传感器模块的电路艺术:从引脚定义到系统集成的设计哲学

本文深入探讨传感器模块的电路设计艺术,从引脚定义到系统集成的完整设计哲学。重点解析电源管理、信号处理及I2C通信协议等核心电路原理,分享多模块协同中的电源架构、信号完整性和接地策略,为硬件工程师提供实用的系统级设计思维与实战案例。

o1p2q3r的博客 223

Core Dump

Core Dump( 核心转储 )

sqjddb的博客 7729

从零开始:IBM V3700控制器更换与机器代码升级全流程指南

本文详细介绍了IBM V3700存储系统控制器更换与机器代码升级的全流程指南。从前期准备、硬件更换到版本同步,逐步解析如何应对503错误等常见问题,确保系统稳定运行。通过实战案例和优化建议,帮助工程师高效完成维护任务,提升存储系统可用性。

weixin_28365523的博客 312

linux 下core dump文件的生成以及错误定位

1.core dump文件 core dump 又叫核心转储,是一个程序运行时的环境一个集合包,包含崩溃时的堆栈信息,是一个二进制文件,无法使用记事本打开,一般会在指定目录下生成一个core文件。core文件仅仅是一个内存映象,主要用来调试。 2.core dump文件的生成 当程序运行过程中异常终止或崩溃时会发生 core dump,但还没说到什么具体的情景程序会发生异常终止或崩溃,例如我们使用 kill -9 命令杀死一个进程会发生 core dump 吗?实验证明是不能的,那么什么情况会产生呢? Li

hongge_smile的博客 1万+

CMOS传输门(互补开关)实战指南 | 设计优化 + 常见问题解析

本文深入解析CMOS传输门(互补开关)的设计优化与常见问题,涵盖导通特性、版图设计、高频应用及混合信号设计等关键领域。通过实测数据和优化技巧,帮助工程师解决衬底连接、信号完整性等实际问题,提升数字和模拟混合信号设计的效率与可靠性。

weixin_29229989的博客 161

双向晶闸管交流调压基础知识及Multisim电路仿真

本文介绍了双向晶闸管交流调压电路的工作原理及应用。该电路由双向晶闸管、RC移相电路和双向触发二极管组成,通过调节电位器改变触发角实现电压调节。当电位器阻值减小时,触发角减小,输出电压升高;阻值增大时,触发角增大,输出电压降低。Multisim仿真展示了不同电位器档位下的波形特征:0%档位时全导通,50%档位时半导通,100%档位时基本关断。该电路结构简单、调节平滑,广泛应用于调光、调速等场合,但会产生谐波干扰。

XU157303764的博客 838

Linux之Core Dump 文件

名称由来:在早期计算机时代,内存被称为 “Core Memory”(磁芯存储器),而 “Dump” 意为转储。Core Dump 即 “内存转储”,指程序在异常终止时,内核将进程当前的内存状态、寄存器值、程序计数器等关键信息写入磁盘文件的过程。技术本质:是 Linux 系统提供的一种调试机制,用于记录进程崩溃时的 “现场证据”,本质是一个包含进程地址空间、寄存器状态、信号类型等信息的二进制文件。默认路径:通常在进程当前工作目录生成名为core的文件,但存在以下问题:多进程崩溃时文件易覆盖。

Mr_-G,一名勤奋底层软件开发工程师的博客 1643

FPGA 学习笔记:解决FPGA程序固化重新上电程序不运行的问题

FPGA 学习笔记:解决FPGA程序固化重新上电程序不运行的问题

坚韧与专注 1万+

linux dump core 文件位置,Linux core dump使用

什么是 core dump?core dump是一个当进程意外终止时包含进程内存内容的文件。当程序崩溃的时候,core dump由kernel触发。core dump能够做为程序崩溃时的过后快照(post-mortem snapshot),尤为是在难以可靠的重现故障的状况下。html大多数Linux系统默认开始core dump。可是一般这么作是有代价的。一方面咱们想要去收集信息从而提升稳定性而且...

weixin_35918198的博客 4071

LOFIC / 全局快门在移动端的可行性:曝光容限、读出噪声与算力预算

手机端引入 LOFIC 与全局快门的核心权衡在于:在有限像素面积与功耗下,如何换取更高的动态范围与运动场景鲁棒性。LOFIC 通过侧向溢流到积分电容扩大满井并保持较高转换增益,全局快门在帧内一次性采样消除行时序伪影,但需付出像素填充率、读出噪声与片上存储功耗的代价。本文以工程可实操为目标,给出像素与读出链的简化模型、曝光损益测算、数据率与带宽估算、端到端算力与热预算方法,配套寄存器配置流程、帧内/帧间切换策略与验证清单,帮助在真实移动 SoC 与 ISP 约束下完成可行性评估与原型落地。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1140

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

linux无法产生core文件夹,无法生成core dump文件的几个原因

1. 进程无写权限(如目录不可写、存在同名的非regular文件(目录或符号链接)等)2. 存在同名文件且有多个hard link3. 文件系统空间不足4. 指定目录不存在5. 进程的RLIMIT_CORE或RLIMIT_SIZE被设置为0。使用getrlimit和ulimit检查修改6. 进程所执行的二进制文件无读权限7. 进程所执行的程序设置了set-user-ID (set-group-ID...

weixin_42498006的博客 6892

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Linux:core dump文件到底是什么

core dump文件是指在程序崩溃或异常时,操作系统将程序的内存信息,寄存器状态,堆栈信息等保存到文件中以便进行调试和分析的文件。core dump文件通常包含了程序崩溃时的全部状态信息们可以帮助程序员快速定位程序崩溃的原因并进行修复。

2301_76226118的博客 2707

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Linux系统 core dump 介绍

1 前言2 基本概念3 开启core dump 1 前言 一直在从事linux下后台开发,经常与core文件打交道。还记得刚开始从事linux下开发时,程序突然崩溃了,也没有任何日志。我不知所措,同事叫我看看core,我却问什么是core,怎么看。同事鄙视的眼神,我依然在目。后来学会了从core文件中分析原因,通过gdb看出程序挂再哪里,分析前后的变量,找出问题的原因。当时就觉得很神奇,core...

EthanYYYY的博客 1818

Linux 设置core dump

什么是coredump当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”)。我们可以认为 core dump 是“内存快照”,但实际上,除了内存信息之外,还有些关键的程序运行状态也会同时 dump 下来,例如寄存器信息(包括程序指针、栈指针等)、内存管理信息、其他处理器和操作系统状态和信息。core

u013010310的专栏 5543

linux下 core dump文件不能生成的可能原因

配置了core 的生成环境,但core就是无法生成. 此时,请参阅,也许会有帮助. linux下生成core dump文件的环境配置方法 作为参照,参见: linux core dump 永久生成 Linux下生成Core Dump文件的方法(总结) 文件不能生成的可能原因 生成core文件的信号被用户程序捕捉(操作系统在程序发生异常而异常信号在进程内部又没有被捕获的情况下,方可生成core文...

@角色扮演# 4521

linux dump进程内存,Linux core dump file详解

1. 前言: 有的程序可以通过编译, 但在运行时会出现Segment fault(段错误). 这通常都是指针错误引起的. 但这不像编译错误一样会提示到文件->行, 而是没有任何信息, 使得我们的调试变得困难起来.2. gdb: 有一种办法是, 我们用gdb的step, 一步一步寻找. 这放在短小的代码中是可行的, 但要让你step一个上万行的代码, 我想你会从此厌恶程序员这个名字, 而把他叫...

weixin_39967598的博客 1640

Linux core日志怎么打开,linux 下如何打开core dump文件开关

dump文件可以在程序crash时,方便我们查看程序crash的地方和上下文信息。在window下,要能生成dump文件,需要自己编写相应的代码。不过现在网上可以找到相应的代码,只要把它下载后然后加到自己的工程中去,就可以了!在linux下面就简单的许多。只要打开相应的开关,linux会自动在程序crash时生成相应的core文件。这个文件和window下的dump文件类似。下面是简单的一些步骤:...

weixin_42402228的博客 3127

Linux上Core Dump文件的形成和分析

Linux上Core Dump文件的形成和分析     Core,又称之为Core Dump文件,是Unix/Linux操作系统的一种机制,对于线上服务而言,Core令人闻之色变,因为出Core的过程意味着服务暂时不能正常响应,需要恢复,并且随着吐Core进程的内存空间越大,此过程可能持续很长一段时间(例如当进程占用60G+以上内存时,完整Core文件需要15分钟才能完全写到磁盘上),这期间产生

粤嵌教育嵌入式园地 609

Linux 下打开 Core Dump

Linux下打开core dump 我使用的 Linux 发行版是 Ubuntu 14.04,设置生成 core dump 文件的方法如下: 打开 core dump 功能 在终端中输入命令 ulimit -c ,输出的结果为 0,说明默认是关闭 core dump 的,即当程序异常终止时,也不会生成 core dump 文件。我们可以使用命令 ulimit -c unlim

在山的那边的博客 6712

linux系统core dump设置,Linux 下生成 core dump 配置和用法

1. 启用 Core dump,系统默认关闭Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。用到的命令是: ulimit// 输入目录查看状态, 0 说明是禁止生成 core 文件。[root@ ~]# ulimit -c0我们可以直接在 ulimit -c 后面加上参数,当为数字时表示限制 core 文件大小不超过 1024KB[ulimit -c 10...

weixin_39887846的博客 915

linux下core dump【总结】

1、前言   一直在从事linux下后台开发,经常与core文件打交道。还记得刚开始从事linux下开发时,程序突然崩溃了,也没有任何日志。我不知所措,同事叫我看看core,我却问什么是core,怎么看。同事鄙视的眼神,我依然在目。后来学会了从core文件中分析原因,通过gdb看出程序挂再哪里,分析前后的变量,找出问题的原因。当时就觉得很神奇,core文件是怎么产生的呢?难道系统会自动产生,可是...

Bruce Che 的专栏 506
上一篇: 【Linux】对信号产生的内核级理解
下一篇: 【Linux】详解信号的保存&&信号屏蔽字的设置
北飞的山羊
北飞的山羊 新星创作者: 后端开发技术领域 新星创作者: 后端开发技术领域
博客等级 码龄4年 3406粉丝 78原创
评论 52
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北飞的山羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值