25.设置及使用coredump文件

news/2024/12/21 22:25:37/

设置及使用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.ppmy.cn/news/1413680.html

相关文章

TTL接口的输入输出

The Ins and Outs of the TTL Interface 串行通信可在相当长的距离内传输数据&#xff0c;通常与 TTL 标准有关。数据通过串行通信传输&#xff0c;串行通信通过单线传输比特位。数据通过双方--发送方和接收方--以二进制脉冲的形式使用各种串行数字二进制技术进行交换。 RS232 …

TypeScript尚硅谷学习

第二章&#xff1a;面向对象 面向对象是程序中一个非常重要的思想&#xff0c;它被很多同学理解成了一个比较难&#xff0c;比较深奥的问题&#xff0c;其实不然。面向对象很简单&#xff0c;简而言之就是程序之中所有的操作都需要通过对象来完成。 举例来说&#xff1a; 操作…

react-router-dom+history路由跳转白屏需手动刷新才显示

搭建一个新项目&#xff0c;路由照常配好了&#xff0c;但是很奇怪&#xff0c;跳转的时候第一次白屏&#xff0c;<root></root>里面只有一个,号&#xff0c;页面是空白的&#xff0c;再手动刷新才显示内容&#xff0c;检查了路由很多遍&#xff0c;也看了地址栏都…

MySQL数据库(基础篇)

数据库相关概念 关系型数据库 概念: 建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库。 特点&#xff1a; 1.使用表存储数据&#xff0c;格式统一&#xff0c;便于维护 2.使用SQL语言操作&#xff0c;标准统一&#xff0c;使用方便 SOL SQL通用语法 …

李廉洋:4.10黄金原油晚间走势最新分析及策略。

鉴于美联储官员对1月和2月通胀数据反应不足&#xff0c;3月通胀数据过热可能导致其反应过度的风险更大。美联储试图避免根据一两个数据点来制定政策&#xff0c;但今年迄今为止经济活动的韧性意味着&#xff0c;在年中降息的理由取决于通胀是否恢复自去年下半年以来的稳步下降趋…

三种常见webshell工具的流量特征分析

又来跟师傅们分享小技巧了&#xff0c;这次简单介绍一下三种常见的webshell流量分析&#xff0c;希望能对参加HW蓝队的师傅们有所帮助。 什么是webshell webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境&#xff0c;主要用于网站管理、服务器管理、…

Tmux 使用笔记

Tmux 是一个终端复用器&#xff08;terminal multiplexer&#xff09;&#xff0c;非常有用&#xff0c;属于常用的开发工具。 本文记录个人使用 Tmux的命令。 1. tmux简介 命令行的典型使用方式是&#xff0c;打开一个终端窗口&#xff0c;连接计算机&#xff0c;在里面输入…

【蓝桥杯】赛前一周模板

小蜜蜂代码风格的&#xff0c;模块都在&#xff0c;希望能够帮助你吧。 目录 AT24C02存储芯片 DS18B20温度传感器 DS1302 时钟 NE555频率测量 PCF8591 AD PWM波 超声波测距 串口UART 4X4矩阵按键 AT24C02存储芯片 void Write_AT24C02(unsigned char addr,unsigned …