当前位置: 首页 > backend >正文

Linux调试生成核心存储文件

1.核心存储文件配置:

不知道理解对不对,Linux中的核心存储文件的配置是在/proc/sys/kernel/core_pattern中的,使用

cat /proc/sys/kernel/core_pattern
# 打印出
|/usr/share/apport/apport -p%p -s%s -c%c -d%d -P%P -u%u -g%g -- %E

表示核心转储会直接通过管道传递给后面的程序(apport),​​而不是生成物理文件。内核会将核心转储数据直接写入 apport 的标准输入(stdin),由 apport 负责后续处理(生成报告、压缩存储等)。

后面接的是参数,参数说明如下:
在这里插入图片描述

2.Apport 的工作流程​​

​​1.触发崩溃​​:程序崩溃(如段错误)时,内核将核心转储数据通过管道发送给 apport。
​​2.生成报告​​:

  • apport 会收集以下信息:
    • 核心转储数据(压缩后存储在报告中)
    • 程序崩溃时的堆栈跟踪
    • 系统日志(如 dmesg 输出)
    • 已安装软件包信息

​​
3.存储报告​​:
报告以 .crash 文件格式存储在 /var/crash/,文件名示例:

_usr_bin_myapp.1000.crash  # 路径中的 `/` 替换为 `_`

3.如何获取核心文件?​​

(1) 从 Apport 报告中提取​​

# 安装工具
sudo apt install apport-retrace
# 解压报告到临时目录
apport-unpack /var/crash/_usr_bin_myapp.1000.crash /tmp/crash-dir
# 核心文件路径
ls /tmp/crash-dir/CoreDump  # 核心文件在此处

​​(2) 临时禁用 Apport​​

# 修改 core_pattern 为生成物理文件
echo "core.%e-%p" | sudo tee /proc/sys/kernel/core_pattern
# 设置核心文件大小无限制
ulimit -c unlimited

(3) 永久生效配置​​

# 编辑 sysctl 配置文件
sudo nano /etc/sysctl.conf# 添加以下内容
kernel.core_pattern = core.%e-%p-%t
kernel.core_uses_pid = 1  # 可选:在文件名末尾附加 PID

应用配置

sudo sysctl -p

​​4. 调试示例​​

# 使用 GDB 分析提取的核心文件
gdb /usr/bin/myapp /tmp/crash-dir/CoreDump
# 查看崩溃堆栈
(gdb) bt full

​​5. 注意事项​​

  • ​​Apport 默认行为​​:
    Ubuntu 仅在 ​​已安装的软件包崩溃时触发弹窗​​,自定义程序崩溃可能不会主动提示。

  • 权限问题​​:
    /var/crash/ 需要 root 权限访问。​​

  • 磁盘空间​​:
    Apport 报告默认会保留在 /var/crash/,需定期清理:

    sudo rm /var/crash/*

http://www.xdnf.cn/news/6889.html

相关文章:

  • React Hooks 必须在组件最顶层调用的原因解析
  • Linux517 rsync同步 rsync借xinetd托管 配置yum源回顾
  • 【typenum】 8 常量文件(consts.rs)
  • 第三十五节:特征检测与描述-ORB 特征
  • SummaryWriter 记录和保存训练日志
  • 阿里云服务器跑模型教程
  • 关键词长度为何重要:2025年SEO优化策略
  • 【typenum】 9 与常量泛型桥接(generic_const_mappings.rs)
  • aksharetools:大模型智能体框架agno可直接获取A股金融数据
  • BUUCTF——Nmap
  • 数据库原理及其应用 第六次作业
  • 计网| 网际控制报文协议(ICMP)
  • ecmascript 第6版特性 ECMA-262 ES6
  • 全端同步!ZKmall开源商城如何用B2B2C模板让消费者跨设备购物体验无缝衔接?
  • 第八节第四部分:认识泛型、泛型类、泛型接口
  • 如何深入学习MATLAB的高级应用?
  • java的面向对象思想
  • VASP+机器学习快速收敛AIMD
  • PyTorch分布式训练深度解析与实战案例
  • 互联网大厂Java面试:从Spring到微服务的全面探讨
  • Maven 插件扩展点与自定义生命周期
  • Linux的静态库 共享库 进程 主函数的参数
  • 【C语言练习】046. 编写插入排序算法
  • JSP与JSTL:EL表达式与MVC分层模式的完美结合
  • 环形缓冲区 ring buffer 概述
  • Java的线程通信机制是怎样的呢?
  • 数据类型转换
  • Node.js 实战四:数据库集成最佳实践
  • 回溯法理论基础 LeetCode 77. 组合 LeetCode 216.组合总和III LeetCode 17.电话号码的字母组合
  • 数据库故障排查指南:解决常见问题,保障数据安全与稳定