崩溃报告默认存于/var/crash,但需确保该目录可写、Apport服务启用且运行正常,否则会静默失败;验证可用kill -SEGV $$触发并检查文件生成。

崩溃报告默认存哪?先确认 /var/crash 是否可写
Ubuntu 的 Apport 服务默认把崩溃报告写进 /var/crash,但这个目录权限是 drwxr-xr-x root root,普通用户进程崩溃时无法直接写入——所以你可能根本看不到 .crash 文件,只看到弹窗一闪而过或干脆没反应。
检查方式:ls -ld /var/crash;如果权限不对或磁盘满(df -h /var),Apport 会静默失败,不报错也不生成文件。
修复建议:
- 确保 /var/crash 存在且 root 可写(一般默认满足)
- 若用非 root 用户运行程序,需确保该程序崩溃时能被 Apport 捕获(比如通过 gdb 或 systemd-coredump 配合)
- 清理旧报告:sudo rm /var/crash/*.crash,避免残留文件干扰新报告生成
启用 Apport 并验证是否生效
Ubuntu LTS 版本(如 22.04/24.04)默认禁用 Apport,enabled=0 是常态,不是 bug。
修改配置:sudo nano /etc/default/apport,把 enabled=0 改成 enabled=1。
重启服务:sudo systemctl restart apport(注意不是 sudo service apport start,后者在新版 systemd 下可能无效)。
验证是否运行:systemctl is-active apport 应输出 active;再看日志:journalctl -u apport -n 20 --no-pager,正常会有类似 Started Apport crash report submission daemon. 的记录。
容易踩的坑:
- 修改后忘记重启服务,导致设置不生效
- 误以为 GUI 弹窗出现才算启用,其实后台服务启动成功才是关键
- 在远程 SSH 会话中测试崩溃,Apport 不会弹窗(无桌面环境),但 /var/crash 仍会生成文件
手动触发一次崩溃并检查报告生成
别等真程序崩,用可控方式验证整条链路:kill -SEGV $$(当前 shell 进程触发段错误)——这是最安全、最轻量的测试法,不会影响系统其他部分。
执行后:
- 如果 Apport 已启用且桌面环境就绪,会弹出「抱歉,该程序已崩溃」对话框
- 同时检查:ls -t /var/crash/,应能看到最新生成的 bash.*.crash 文件
- 查看内容:cat /var/crash/bash.*.crash | head -20,确认含 ProblemType: Crash 和堆栈片段
注意:
- kill -ABRT $$ 也能触发,但某些 shell 对 ABRT 处理不一致,SEGV 更可靠
- 不要用 echo c > /proc/sysrq-trigger 测试 Apport,那是内核 panic,走的是 kdump/pstore 路径,和用户态 Apport 无关
- 若没生成文件,优先查 journalctl -u apport 里的拒绝日志,常见原因是 ProcEnviron 字段为空或进程 UID 不匹配
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
让自定义程序也进 Apport:编译 + 符号表 + 权限
自己写的 C/C++ 程序默认不被 Apport 捕获,除非满足三个条件:
- 编译时加调试信息:gcc -g -O0 crash.c -o crash(-g 必须,-O0 推荐,优化可能抹掉帧指针)
- 程序安装到标准路径(如 /usr/bin/)或在 /usr/share/apport/package-hooks/ 下配钩子脚本
- 运行时不要用 sudo 直接启(root 进程崩溃由 Apport 过滤,默认忽略);若必须用 sudo,改用 sudo -E ./crash 保留环境变量
验证方式:./crash(让它崩溃),然后立刻查 /var/crash/;若没文件,用 apport-cli --save /tmp/test.crash ./crash 手动生成报告对比差异。
关键细节:
- Apport 依赖 core_pattern 设置,若你之前改过 /proc/sys/kernel/core_pattern 指向其他路径,Apport 可能收不到 core dump
- Ubuntu 22.04+ 默认启用 systemd-coredump,它和 Apport 共存但优先级不同;冲突时可临时禁用:sudo systemctl stop systemd-coredump
Apport 报告是否生成,不取决于“程序崩得多惨”,而取决于「崩溃时进程上下文是否被 Apport 观察到」——路径、权限、符号、服务状态,缺一不可。最常卡在第一步:/var/crash 看似存在,实则因磁盘满或权限锁死,连日志都不留一条。

















