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/*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值