排查 macOS 内核恐慌需聚焦 panic 事件、shutdown cause 代码及 .panic/.diag 报告文件;用 log show 命令精准提取结构化日志,结合 shutdown cause 值(如 3 表示内核不可恢复错误)定位根源,并通过 DiagnosticReports 目录获取完整堆栈信息。
排查 macos 内核恐慌(kernel panic),关键不是找“有没有 panic”,而是从海量日志中精准抓取与崩溃直接相关的结构化线索——包括 panic 事件本身、关机原因代码(shutdown cause)、以及对应的诊断报告文件。log show 命令是直达系统统一日志数据库的最可靠方式,比图形界面更全、更及时。
提取最近的 panic 日志条目
系统每次 Kernel Panic 发生前后,都会在统一日志中留下带关键词的结构化记录。执行以下命令可快速拉取:
-
查最近 30 天所有含 panic 的日志:
log show --predicate 'eventMessage contains "panic" OR eventMessage contains "Kernel Panic"' --last 30d -
限定内核子系统,排除应用干扰:
log show --predicate 'subsystem == "com.apple.kernel" AND eventMessage contains "panic"' --last 90d -
导出为文本方便分析或提交支持:
log show --predicate 'eventMessage contains "panic"' --last 60d > ~/Desktop/panic_log.txt
定位并验证关机原因代码
Previous shutdown cause 是判断崩溃性质的黄金字段。它的值是十六进制整数,直接对应故障类型:
-
查最近 7 天所有关机原因记录:
log show --predicate 'eventMessage contains "Previous shutdown cause"' --last 7d -
只取最新一条(避免被旧记录淹没):
log show --predicate 'eventMessage contains "Previous shutdown cause"' --last 1d | tail -n 1 - 常见代码含义:3 = 内核不可恢复错误(典型 Kernel Panic);5 = 温度过高;128 = 电源异常断开;-128 = 手动关机
列出并读取原始 panic 报告文件
log show 提供的是日志摘要,而完整内存快照和调用堆栈藏在 .panic 或 .diag 文件里,路径固定:
-
列出所有系统级 panic 报告(需管理员权限):
ls -t /Library/Logs/DiagnosticReports/*.{panic,diag} 2>/dev/null -
查看最新一份的前 100 行(防大文件卡顿):
cat "$(ls -t /Library/Logs/DiagnosticReports/*.{panic,diag} 2>/dev/null | head -n1)" | head -n 100 -
直接提取其中的 shutdown cause 行:
grep "Previous shutdown cause" "$(ls -t /Library/Logs/DiagnosticReports/*.{panic,diag} 2>/dev/null | head -n1)"
结合进程与时间进一步缩小范围
如果已知崩溃发生的大致时间或关联进程(如 kernel、WindowServer、某个驱动名),可用谓词组合过滤:
-
查某天某时段内的 panic 相关日志:
log show --predicate 'eventMessage contains "panic"' --start "2026-07-05" --end "2026-07-06" -
聚焦特定进程引发的 error/fault(如怀疑第三方驱动):
log show --predicate '(process == "kernel" OR process contains "Soundflower") AND (eventMessage contains "error" OR eventMessage contains "fault")' --last boot -
导出全部错误级别日志用于离线排查:
log show --predicate 'level >= error' --last 7d > ~/Desktop/errors_full.txt


















