You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Buildroot 24.02系统中崩溃程序无法生成Core Dump文件求助

Buildroot系统无法生成Core Dump的排查与解决

已确认的排查项

先再次确认已配置项的有效性:

  • 执行ulimit -a,确保core file size显示为unlimited,若通过远程连接操作,需重新登录使limits.conf配置生效。
  • 核对内核参数:cat /proc/sys/kernel/core_pattern应输出/tmp/core-%e-%s-%u-%g-%p-%t;cat /proc/sys/kernel/core_uses_pid值为1(该参数会在文件名后追加PID,不影响核心文件生成)。
  • 确认/tmp目录权限:ls -ld /tmp结果应为drwxrwxrwt,确保所有用户可读写。

额外排查与修复步骤

  1. 检查systemd-coredump服务状态
    启用BR2_PACKAGE_SYSTEMD_COREDUMP后,需确保相关服务正常运行:

    systemctl status systemd-coredump.socket
    systemctl status systemd-coredump.service
    

    若未启动,手动启用:

    systemctl enable --now systemd-coredump.socket
    

    编辑/etc/systemd/coredump.conf,确保核心存储配置正确:

    [Coredump]
    Storage=external
    Compress=no
    ProcessSizeMax=infinity
    ExternalSizeMax=infinity
    

    注意:systemd-coredump启用后会接管内核的core处理,默认将核心文件存储在/var/lib/systemd/coredump/而非/tmp,这可能是你未找到文件的原因。

  2. 排查程序跟踪限制
    若程序被调试器或ptrace进程跟踪,内核可能拒绝生成核心文件。执行ps aux | grep <你的测试程序名>确认无附加调试进程;或用strace ./你的测试程序查看是否存在阻止核心生成的ptrace调用。

  3. 核对Buildroot编译配置

    • 确保测试程序编译时未添加-fno-stack-protector、-nostartfiles等可能干扰核心生成的选项,建议添加-g参数生成调试信息(不影响核心文件生成,仅便于后续分析)。
    • 进入make menuconfig -> Kernel -> Kernel configuration,确认CONFIG_COREDUMP内核选项已启用(内核默认通常开启,若被禁用则无法生成核心文件)。
  4. 手动触发核心生成测试
    运行测试程序后,用kill -SIGSEGV <程序PID>手动发送段错误信号,验证是否能生成核心文件,排除abort()调用本身的问题。

  5. 检查安全机制限制
    若Buildroot启用了SELinux或AppArmor,可能阻止核心文件写入。临时关闭SELinux:setenforce 0;或检查AppArmor规则,确认未限制程序写入/tmp或/var/lib/systemd/coredump/目录。

核心文件验证

除了查看/tmp,执行coredumpctl list可查看所有记录的核心转储;用coredumpctl info <PID>查看详细信息;用coredumpctl dump <PID> --output=/tmp/core.dump可将核心文件导出到指定位置。

内容的提问来源于stack exchange,提问作者Craig S. Anderson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:21:15