Debian/Ubuntu systemd coredump调试程序Crash

程序是通过systemd监管,当程序出现crash的时候,需要保存crash的日志,也就是coredump日志,按照一般做法设置coredump。而在安装有systemd服务的系统中一般都有systemd-coredump服务。
systemd-coredump 是 systemd 子系统中的一个工具,用于 收集、处理和存储 Linux 系统中的 core dump 文件。它是现代 Linux 系统中处理进程崩溃信息的推荐方式,替代了传统的直接生成 core 文件。

systemd-coredump的主要功能

功能说明
📦 捕获崩溃进程的核心转储接管核心转储处理,替代传统 core 文件
🧾 保存或丢弃 core 文件可配置是否保存到磁盘、压缩、限制大小
🗂 统一存储所有 core 文件保存到 /var/lib/systemd/coredump/
🔍 提供调试接口coredumpctl 命令用于列出、查看、调试 core 文件
🧱 安全性默认以受限权限运行,不会泄露敏感信息

安装systemd-coredump服务

检查是否已安装

$ which coredumpctl
/usr/bin/coredumpctl

这里会输出coredumpctl所在的位置,而我最开始的时候,系统是没有安装coredumpctl。

安装systemd-coredump服务

$ sudo apt-get install systemd-coredump
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:systemd-coredump
0 upgraded, 1 newly installed, 0 to remove and 261 not upgraded.
Need to get 93.0 kB of archives.
After this operation, 374 kB of additional disk space will be used.
Get:1 https://mirrors.aliyun.com/debian-security bookworm-security/main arm64 systemd-coredump arm64 252.38-1~deb12u1 [93.0 kB]
Fetched 93.0 kB in 1s (181 kB/s)
Selecting previously unselected package systemd-coredump.
(Reading database ... 156369 files and directories currently installed.)
Preparing to unpack .../systemd-coredump_252.38-1~deb12u1_arm64.deb ...
Unpacking systemd-coredump (252.38-1~deb12u1) ...
Setting up systemd-coredump (252.38-1~deb12u1) ...Configuration file '/etc/systemd/coredump.conf'==> File on system created by you or by a script.==> File also in package provided by package maintainer.What would you like to do about it ?  Your options are:Y or I  : install the package maintainer's versionN or O  : keep your currently-installed versionD     : show the differences between the versionsZ     : start a shell to examine the situationThe default action is to keep your current version.
*** coredump.conf (Y/I/N/O/D/Z) [default=N] ? Y
Installing new version of config file /etc/systemd/coredump.conf ...
Creating group 'systemd-coredump' with GID 991.
Creating user 'systemd-coredump' (systemd Core Dumper) with UID 991 and GID 991.
Processing triggers for man-db (2.11.2-2) ...

coredump.conf --> 这里输入Y

配置coredump.conf

[Coredump]
Storage=external
Compress=yes
ProcessSizeMax=2G
ExternalSizeMax=2G
JournalSizeMax=767M
MaxUse=2G
#KeepFree=

检查core_pattern

在安装systemd-coredump服务时,已经做了对应的配置

cat /proc/sys/kernel/core_pattern
|/lib/systemd/systemd-coredump %P %u %g %s %t 9223372036854775808 %h %d

reload systemd

sudo systemctl daemon-reexec

测试

测试程序

// crash.cpp
int main() {int* p = nullptr;*p = 1;
}

编译&触发coredump

$ g++ crash.cpp -o crash
ulimit -c unlimited
./crash

检查systemd-coredump的输出

$ coredumpctl list
TIME                           PID  UID  GID SIG     COREFILE EXE                            SIZE
Wed 2025-06-11 01:49:07 BST 357407 1000 1000 SIGSEGV present  /home/pi/workspace/core/crash 35.5K

具体coredump信息

$ coredumpctl info crashPID: 357407 (crash)UID: 1000 (pi)GID: 1000 (pi)Signal: 11 (SEGV)Timestamp: Wed 2025-06-11 01:49:06 BST (2min 22s ago)Command Line: ./crashExecutable: /home/pi/workspace/core/crashControl Group: /user.slice/user-1000.slice/session-67.scopeUnit: session-67.scopeSlice: user-1000.sliceSession: 67Owner UID: 1000 (pi)Boot ID: 9f37ddcf177845c5b33baf5ede4df169Machine ID: 3193cd42b55048b38d93ded435763681Hostname: raspberrypi-CM5Storage: /var/lib/systemd/coredump/core.crash.1000.9f37ddcf177845c5b33baf5ede4df169.357407.1749602946000000.zst (present)Size on Disk: 35.5KMessage: Process 357407 (crash) of user 1000 dumped core.Stack trace of thread 357407:#0  0x000055562d490724 n/a (/home/pi/workspace/core/crash + 0x724)#1  0x00007fffb2fc7740 __libc_start_call_main (libc.so.6 + 0x27740)#2  0x000055562d490714 n/a (/home/pi/workspace/core/crash + 0x714)ELF object binary architecture: AARCH64

coredump debug

$ coredumpctl gdb crashPID: 357407 (crash)UID: 1000 (pi)GID: 1000 (pi)Signal: 11 (SEGV)Timestamp: Wed 2025-06-11 01:49:06 BST (2min 5s ago)Command Line: ./crashExecutable: /home/pi/workspace/core/crashControl Group: /user.slice/user-1000.slice/session-67.scopeUnit: session-67.scopeSlice: user-1000.sliceSession: 67Owner UID: 1000 (pi)Boot ID: 9f37ddcf177845c5b33baf5ede4df169Machine ID: 3193cd42b55048b38d93ded435763681Hostname: raspberrypi-CM5Storage: /var/lib/systemd/coredump/core.crash.1000.9f37ddcf177845c5b33baf5ede4df169.357407.1749602946000000.zst (present)Size on Disk: 35.5KMessage: Process 357407 (crash) of user 1000 dumped core.Stack trace of thread 357407:#0  0x000055562d490724 n/a (/home/pi/workspace/core/crash + 0x724)#1  0x00007fffb2fc7740 __libc_start_call_main (libc.so.6 + 0x27740)#2  0x000055562d490714 n/a (/home/pi/workspace/core/crash + 0x714)ELF object binary architecture: AARCH64GNU gdb (Debian 13.1-3) 13.1
Copyright (C) 2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "aarch64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:<http://www.gnu.org/software/gdb/documentation/>.For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /home/pi/workspace/core/crash...
(No debugging symbols found in /home/pi/workspace/core/crash)
[New LWP 357407]
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1".
Core was generated by `./crash'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000055562d490724 in main ()
(gdb) bt
#0  0x000055562d490724 in main ()
(gdb) quit

自定义service配置

[Unit]
Description=application
After=custom.service
Requires=xxxx.service[Service]
LimitCORE=infinity
LimitSTACK=infinity
Type=simple
ExecStart=/custom/app/custom
Restart=on-failure
TimeoutStopSec=30s
WorkingDirectory=/custom[Install]
WantedBy=multi-user.target
设置项说明
LimitCORE=infinity允许 systemd 启动的程序生成 core dump
WorkingDirectorycore 文件会默认保存到这里(如果未被 systemd-coredump 截获)
Restart=on-failure保证崩溃时自动重启进程(但不影响 core dump)

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

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

相关文章

【图片转 3D 模型】北大·字节跳动·CMU携手——单图15 秒生成结构化3D模型!

​​引言&#xff1a;单图生成结构化 3 D 模型的技术突破​ ​ PartCrafter 由北京大学、字节跳动与卡耐基梅隆大学联合研发&#xff0c;是全球首个​​端到端生成结构化 3 D 网格​​的模型。它仅需单张 RGB 图像&#xff0c;即可在 34 秒内生成带语义分解的 3 D 部件&#xf…

零基础RT-thread第二节:按键控制

我这里依然使用的是野火开发板&#xff0c;F767芯片。 这一节写一下按键控制LED亮灭。 这是按键以及LED的原理图。 按键对应的引脚不按下时是低电平&#xff0c;按下后是高电平。 LED是在低电平点亮。 接下来是key.c: /** Copyright (c) 2006-2021, RT-Thread Development T…

《Gulp与SCSS:解构前端样式开发的底层逻辑与实战智慧》

探寻Gulp与SCSS协作的底层逻辑 Gulp&#xff0c;作为任务自动化的佼佼者&#xff0c;其核心价值在于将一系列复杂的任务&#xff0c;如文件的编译、合并、压缩等&#xff0c;以一种流畅且高效的方式串联起来&#xff0c;形成一个自动化的工作流。它基于流&#xff08;stream&a…

OpenCV CUDA模块图像变形------对图像进行GPU加速的透视变换函数warpPerspective()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数用于对图像进行 GPU 加速的透视变换&#xff08;Perspective Transformation&#xff09;&#xff0c;是 cv::warpPerspective 的 CUDA 版…

吴恩达机器学习笔记(2)—单变量线性回归

目录 一、模型表示 二、代价函数 三、代价函数的直观理解&#xff08;1&#xff09; 四、代价函数的直观理解&#xff08;2&#xff09; 五、梯度下降 六、梯度下降的直观理解 七、线性回归的梯度下降 在本篇内容中&#xff0c;我们将介绍第一个机器学习算法——线性回归…

最新华为 HCIP-Datacom(H12-821)

最新 HCIP-Datacom&#xff08;H12-821&#xff09;&#xff0c;完整题库请上方访问&#xff0c;更新完毕。 在OSPF网络中&#xff0c;NSSA区域与STUB区域都是为了减少LSA数量&#xff0c;两者最主要的区别在于&#xff0c;NSSA区域可以引入外部路由&#xff0c;并同时接收OSPF…

vba学习系列(11)--批退率通过率等数据分析

系列文章目录 文章目录 系列文章目录前言一、外观报表1.产能2.固定伤排查3.镜片不良TOP4.镜片公式计算5.镜片良率计算6.镜片批退率7.镜筒不良TOP8.镜筒公式计算9.镜筒良率计算10.镜筒批退率 二、反射率报表1.机台通过率2.镜片通过率圈数分析3.镜片通过率罩次分析4.镜筒通过率圈…

成功在 Conda Python 2.7 环境中安装 Clipper(eCLIP peak caller)

&#x1f52c; 成功在 Conda Python 2.7 环境中安装 Clipper&#xff08;eCLIP peak caller&#xff09; 本文记录了如何在无 root 权限下使用 Conda 环境&#xff0c;解决依赖、构建扩展模块并成功安装运行 clipper 的详细流程。适用于再现 eCLIP 分析流程时遇到 clipper 安装…

通过 VS Code 连接 GitLab 并上传项目

通过 VS Code 连接 GitLab 并上传项目&#xff0c;请按照以下步骤操作&#xff1a; 1. 安装必要工具 确保已安装 Git 并配置用户名和邮箱&#xff1a; git config --global user.name "你的用户名" git config --global user.email "你的邮箱" 在 VS Cod…

开源夜莺支持MySQL数据源,更方便做业务指标监控了

夜莺监控项目最核心的定位&#xff0c;是做一个告警引擎&#xff0c;支持多种数据源的告警。这个版本的更新主要是增加了对 MySQL 数据源的支持&#xff0c;进一步增强了夜莺在业务指标监控方面的能力。 之前版本的夜莺主要聚焦在 Prometheus、VictoriaMetrics、ElasticSearch…

SpringCloud + MybatisPlus:多租户模式与实现

一、多租户的基本概念 多租户(Multi-Tenancy) 是指在一套软件系统中,多个租户(客户)共享相同的基础设施和应用程序,但数据和配置相互隔离的架构模式。其核心目标是 降低成本 和 保证数据安全。 核心特点: 资源共享:租户共享服务器、数据库、代码等资源。数据隔离:通…

Kafka入门:解锁核心组件,开启消息队列之旅

一、引言 Kafka以超高速吞吐、精准的路由策略和永不掉线的可靠性&#xff0c;让海量数据在分布式系统中畅行无阻。无论你是刚接触消息队列的技术小白&#xff0c;还是寻求性能突破的开发老手&#xff0c;掌握 Kafka 核心组件的运作原理&#xff0c;都是解锁高效数据处理的关键…

前端项目Excel数据导出同时出现中英文表头错乱情况解决方案。

文章目录 前言一、Excel导出出现中英文情况。二、解决方案数据处理 三、效果展示总结 前言 在前端项目中实现Excel导出功能时&#xff0c;数据导出excel是常见的业务需求。但excel导出完表头同时包含了中文和英文的bug&#xff0c;下面是我的经验分享&#xff0c;应该可以帮助…

《开窍》读书笔记8

51.学会赞美他人&#xff0c;能净化心灵&#xff0c;建立良好人际关系&#xff0c;让生活充满阳光。 52.欣赏他人的学习过程&#xff0c;能激发潜能&#xff0c;促进相互成长&#xff0c;让有点共存。 53.别因“自我”一叶障目&#xff0c;要关注他人&#xff0c;欣赏与别欣赏式…

基于 Spring Cloud Gateway + Sentinel 实现高并发限流保护机制

基于 Spring Cloud Gateway Sentinel 实现视频播放接口限流保护机制 作者&#xff1a;NovaTube 开发者 &#xff5c; 时间&#xff1a;2025-06 标签&#xff1a;Spring Cloud Gateway、Sentinel、微服务、限流、接口保护 一、背景介绍 在我们开发的在线视频分享平台 NovaTube…

CountDownLatch入门代码解析

文章目录 核心思想&#xff1a;火箭发射倒计时 &#x1f680;最简单易懂的代码示例代码解析运行流程分析 核心思想&#xff1a;火箭发射倒计时 &#x1f680; 想象一下发射火箭的场景&#xff0c;在按下最终的发射按钮之前&#xff0c;必须有好几个系统同时完成自检&#xff0…

用Python写一个可视化大屏

用Python打造可视化大屏&#xff1a;数据洞察新视界 在当今数据爆炸的时代&#xff0c;数据可视化成为了理解和传达复杂信息的关键工具。Python作为一门强大且灵活的编程语言&#xff0c;提供了丰富的库和工具&#xff0c;让我们能够创建出令人惊叹的可视化大屏。本文将带你逐步…

20250611让NanoPi NEO core开发板在Ubuntu core16.04系统下开机自启动的时候拉高GPIOG8

rootNanoPi-NEO-Core:/# touch open_4g_ec20.sh rootNanoPi-NEO-Core:/# vi open_4g_ec20.sh 【打开使能引脚200 IOG8】 echo 200 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio200/direction echo 1 > /sys/class/gpio/gpio200/value 【切记&#xff1a…

解惑1、为何大容量电容滤低频,小容量电容滤高频

一、电容的种类&#xff1a; 链接&#xff1a; 二、疑惑 理论推算&#xff1a; 1&#xff09;Zc1/wc&#xff0c;那么大容量和小容量的电容&#xff0c;不应该都是 越高频越阻抗低&#xff0c;越容易通过&#xff1f; 2&#xff09;大容量&#xff0c;积蓄电荷速度慢&#…

如何有效监控JVM环境,保障应用性能

缓慢的Java应用程序、意外崩溃和晦涩的内存问题——这些都是JVM可能在默默承受压力的信号。JVM监控对于保障Java应用的正常运行时间和最佳性能至关重要&#xff0c;它提供了对Java虚拟机内存、线程和CPU资源使用情况的可见性&#xff0c;使管理员能够在影响终端用户之前识别性能…