25.设置及使用coredump文件

设置及使用coredump文件

文章目录

  • 设置及使用coredump文件
    • coredump文件介绍
    • 开启关闭核心转储`core dumps`功能
      • 开启核心转储生成功能
      • 关闭生成转储文件
    • coredumps文件的使用
      • 查看core进程的所有线程堆栈
      • reference


欢迎访问个人网络日志🌹🌹知行空间🌹🌹


coredump文件介绍

核心转储是一个包含进程意外终止时进程内存内容的文件。核心转储由内核触发以响应程序崩溃。核心转储作为崩溃时程序状态的事后快照非常重要,特别是在故障难以重现的情况下。

开启关闭核心转储core dumps功能

核心转储功能是否开启可以使用命令ulimit查看

ulimit -a# core file size          (blocks, -c) 0
# data seg size           (kbytes, -d) unlimited
# scheduling priority             (-e) 0
# file size               (blocks, -f) unlimited
# pending signals                 (-i) 63207
# max locked memory       (kbytes, -l) 65536
# max memory size         (kbytes, -m) unlimited
# open files                      (-n) 1024
# pipe size            (512 bytes, -p) 8
# POSIX message queues     (bytes, -q) 819200
# real-time priority              (-r) 0
# stack size              (kbytes, -s) 8192
# cpu time               (seconds, -t) unlimited
# max user processes              (-u) 63207
# virtual memory          (kbytes, -v) unlimited
# file locks                      (-x) unlimited

其中,core file size (blocks, -c) 0说明程序崩溃时不会生成core文件。

开启核心转储生成功能

转储文件的使能是通过命令ulimit控制的soft limit。通过如下命令可以临时开启生成转储文件:

ulimit -S -c unlimited

-S参数表示soft limit-c表示的coredumps文件的大小限制。

如果想在当前系统设置永久生效,可以在/etc/security/limits.conf中添加如下配置行:

* soft core unlimited

默认情况下生成的coredumps文件由apport程序管理,因此要查找默认生成的coredumps文件路径,可以先查看apport程序日志:

cat /var/log/apport.log# ERROR: apport (pid 306149) Wed Apr 10 00:48:57 2024: executable does not belong to a package, ignoring
# ERROR: apport (pid 306149) Wed Apr 10 00:48:57 2024: writing core dump to core._media_xx_data_code_basic_cplusplus_examples_debug_leak.1000.47fbc564-8f91-46c4-9af5-1d77388becb8.306148.70162237 (limit: -1)

可以看到生成了core._media_xx_data_code_basic_cplusplus_examples_debug_leak.1000.47fbc564-8f91-46c4-9af5-1d77388becb8.306148.70162237文件,在/var路径下搜索发现:

sudo find ./ -name core._media_xx_data_code_basic_cplusplus_examples_debug_leak.1000.47fbc564-8f91-46c4-9af5-1d77388becb8.306148.70162237
[sudo] password for xx: 
./lib/apport/coredump/core._media_xx_data_code_basic_cplusplus_examples_debug_leak.1000.47fbc564-8f91-46c4-9af5-1d77388becb8.306148.70162237

设置coredumps文件的生成路径,上面是默认生成coredumps文件的路径,用户可以根据需要自己定制文件的路径:

sudo sysctl -w kernel.core_pattern=/coredumps/core-%e-%s-%u-%g-%p-%t
# will update content in `/proc/sys/kernel/core_pattern`

上面的命令是一次性的,只能控制当前环境中生成的coredumps文件位置,要想设置系统层面coredumps文件的生成路径,可以在文件/etc/sysctl.conf中添加一行如下内容:

kernel.core_pattern="/coredumps/core-%e-%s-%u-%g-%p-%t"

设置core_pattern时对应的符号含义:

# %e  The process or thread's comm value, which typically is the
#     same as the executable filename (without path prefix, and
#     truncated to a maximum of 15 characters)
# %i  TID of thread that triggered core dump, as seen in the PID
#     namespace in which the thread resides.
# %p  PID of dumped process, as seen in the PID namespace in which
#     the process resides.
# %s  Number of signal causing dump.# %%    单个%字符
# %p    所dump进程的进程ID
# %u    所dump进程的实际用户ID
# %g    所dump进程的实际组ID
# %s    导致本次core dump的信号
# %t    core dump的时间 (由1970年1月1日计起的秒数)
# %h    主机名
# %e    程序文件名

Attention:这里需要注意的是在设置core_pattern时,需要确保指定的目录存在。不要设置在挂载的数据硬盘上,否则会导致size0``coredump文件。gdb使用时会报错:

# core.leak-11-1000-1000-313132-1712684913" is not a core dump: file format not recognized

关闭生成转储文件

通过命令控制:

ulimit -S -c 0

持久化修改,在文件/etc/security/limits.conf中加入如下行:

* soft core 0
* hard core 0

coredumps文件的使用

使用gdb调试程序:

gdb test coredumps_file

查看core进程的所有线程堆栈

  • 查看所有线程正在运行的指令信息
info threads
#   Id   Target Id         Frame 
# * 1    LWP 354754        __GI___libc_free (mem=0x4) at malloc.c:3102
  • 打开所有线程的堆栈信息
thread apply all bt
  • 查看指定线程堆栈信息
thread apply <Id> bt

欢迎访问个人网络日志🌹🌹知行空间🌹🌹


reference

1.https://medium.com/@sourabhedake/core-dumps-how-to-enable-them-73856a437711
2.https://zhuanlan.zhihu.com/p/46605905
3.https://stackoverflow.com/questions/13403824/empty-core-dump-file-after-segmentation-fault

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

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

相关文章

2404d,d符号表示dip1045

原文 符号表示 概述 符号是本地语言功能的最终表示.在编译器或语言级别,不准确表示它们可能会导致链接失败.这些问题可能是令人沮丧的重要来源,甚至可能导致人们认为无法实现方法. 此DIP的目的是解决和纠正各种跨平台和目标的常见共享库链接错误. 理由 对不熟悉链接器的人…

数位DP模型

目录 度的数量思路代码实现暴力解法数位DP 数字游戏代码实现 Windy数代码实现 数字游戏 II代码实现 不要62代码实现 恨7不成妻代码实现 度的数量 题目描述&#xff1a; 求给定区间 [ X , Y ] [X,Y] [X,Y] 中满足下列条件的整数个数&#xff1a;这个数恰好等于 K K K 个互不…

安装Schedule库的方法最终解答!_Python第三方库

安装Python第三方库Schedule 我的环境&#xff1a;Window10&#xff0c;Python3.7&#xff0c;Anaconda3&#xff0c;Pycharm2023.1.3 Schedule库 Schedule 是一个轻量级、功能强大而灵活的任务调度工具库&#xff0c;用于在指定的时间间隔内执行任务。为用户提供了简单易用的…

kali使用msf+apkhook520+cploar实现安卓手的攻击

学习网络安全的过程中&#xff0c;突发奇想怎么才能控制或者说是攻击手机 边找工作边实验 话不多说启动kali 一、使用msfapktool生成简单的木马程序 首先使用kali自带的msfvenom写上这样一段代码 选择安卓 kali的ip 一个空闲的端口 要输出的文件名 msfvenom -p android/met…

kafka(五)——消费者流程分析(c++)

概念 ​ 消费者组&#xff08;Consumer Group&#xff09;&#xff1a;由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据&#xff0c;一个分区只能由一个组内消费者消费&#xff1b;消费者组之间互不影响。所有的消费者都属于某个消费者组&#xff0c;即消费者…

计算机是怎么工作的7

内存分配——内存管理&#xff08;Memory Mangae) 进程如何管理内存&#xff0c;其实是一个非常复杂的事情 核心结论&#xff1a;每个进程的内存&#xff0c;是彼此独立&#xff0c;互不干扰的 通常情况下&#xff0c;进程A不能直接访问进程B的内存; 为了系统的稳定性 如果…

今日arXiv最热大模型论文:Dataverse,针对大模型的开源ETL工具,数据清洗不再难!

引言&#xff1a;大数据时代下的ETL挑战 随着大数据时代的到来&#xff0c;数据处理的规模和复杂性不断增加&#xff0c;尤其是在大语言模型&#xff08;LLMs&#xff09;的开发中&#xff0c;对海量数据的需求呈指数级增长。这种所谓的“规模化法则”表明&#xff0c;LLM的性…

HTML - 请你说一下如何阻止a标签跳转

难度级别:初级及以上 提问概率:55% a标签的默认语义化功能就是超链接,HTML给它的定位就是与外部页面进行交流,不过也可以通过锚点功能,定位到本页面的固定id区域去。但在开发场景中,又避免不了禁用a标签的需求,那么都有哪些方式可以禁用…

【就近接入,智能DNS-Geo DNS ,大揭秘!】

做过后端服务或者网络加速的小伙伴&#xff0c;可能或多或少都听说过&#xff0c;智能DNS或者Geo DNS&#xff0c;就是根据用户的位置&#xff0c;返回离用户最近的服务节点&#xff0c;就近接入&#xff0c;以达到服务提速的效果。 那么大家有没想过&#xff0c;这个背后的原理…

成绩分析 蓝桥杯 java

成绩分析 小蓝给学生们组织了一场考试&#xff0c;卷面总分为 100 分&#xff0c;每个学生的得分都是一个 0 到 100 的整数。 请计算这次考试的最高分、最低分和平均分。 输入格式 输入的第一行包含一个整数 n&#xff0c;表示考试人数。 接下来 n 行&#xff0c;每行包含一…

C++:日期类的实现 const修饰 取地址及const取地址操作符重载(类的6个默认成员函数完结篇)

一、日期类的实现 根据之前赋值运算符重载逻辑&#xff0c;我们现在来实现完整的日期类。 1.1 判断小于 上篇博客已经实现: bool operator<(const Date& d) {if (_year < d._year){return true;}else if (_year d._year){if (_month < d._month){return true…

总结C/C++中程序内存区域划分

C/C程序内存分配的几个区域&#xff1a; 1. 栈区&#xff08;stack&#xff09;&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中&#xff0c;效率很⾼…

KISS 原则和 YAGNI原则

设计模式专栏&#xff1a;http://t.csdnimg.cn/3a25S 目录 1.引言 2.代码并非行数越少越简单 3.代码复杂不一定违反 KISS 原则 4.如何写出满足 KISS 原则的代码 5.YAGNI原则和 KISS 原则的区别 1.引言 KISS原则的英文描述有3种版本:Keep It Simple and Supid、 keep It Sh…

OpenHarmony开发技术:【国际化】实例

国际化 如今越来的越多的应用都走向了海外&#xff0c;应用走向海外需要支持不同国家的语言&#xff0c;这就意味着应用资源文件需要支持不同语言环境下的显示。本节就介绍一下设备语言环境变更后&#xff0c;如何让应用支持多语言。 应用支持多语言 ArkUI开发框架对多语言的…

Autowired和Resource的关系?

相同点 对于下面的代码来说&#xff0c;如果是Spring容器的话&#xff0c;两个注解的功能基本是等价的&#xff0c;他们都可以将bean注入到对应的field中 Autowired private Bean beanA; Resource private Bean beanB; 不同点 byName和byType匹配顺序不同 Autowired在获取…

TypeScript—详解、小案例(配合源代码)

简介&#xff1a;TypeScript是微软开发的 JavaScript 的超集&#xff0c;TypeScript兼容JavaScript&#xff0c;可以载入JavaScript代码然后运行。TypeScript与JavaScript相比进步的地方 包括&#xff1a;加入注释&#xff0c;让编译器理解所支持的对象和函数&#xff0c;编译器…

Web路径专题

文章目录 1.资源定位1.前置条件上下文路径设置 2.上下文路径介绍重点说明 3.资源定位方式资源路径 上下文路径 资源位置a.html定位C.java定位 4.浏览器和服务器解析的区别1.浏览器解析/&#xff08;地址变化&#xff09;2.服务器解析/&#xff08;地址不变&#xff09; 5.带/…

备份工具--kopia

kopia 备份测试 安装minio wget https://dl.min.io/server/minio/release/linux-amd64/minio 创建目录 mkdir -p /data/myapp/minio mkdir -p /data/minidata 配置启动 cat start_minio.sh nohup /data/myapp/minio/minio server --console-address :“9090” /data/minidata…

数据流重定向

数据流重定向 标准输入 0 标准输出 1 标准错误输出 2 输出 > 标准输出 1>标准错误输出 2>标准输出标准错误输出 2>&1 或 &> 输入 < 标准输入 0<eof输入 cat > catfile <<“eof” 双向重定向 tee [command] | tee -a [file] [comma…

Spring和Spring MVC和MyBatis面试题

面试题1&#xff1a;请简述Spring、Spring MVC和MyBatis在整合开发中的作用&#xff1f; 答案&#xff1a; Spring&#xff1a;是一个轻量级的控制反转&#xff08;IoC&#xff09;和面向切面&#xff08;AOP&#xff09;的容器框架。它提供了强大的依赖注入功能&#xff0c;…