log show 命令无法直接输出完整堆栈,需通过关键词筛选、子系统限定及导出分析定位堆栈线索;完整符号化堆栈应查阅 Console App 的崩溃报告或 DiagnosticReports 目录下的 .crash 文件。
macos 的 log show 命令本身不直接输出完整堆栈(stack trace),因为 unified logging 系统默认只记录结构化日志事件,而崩溃堆栈通常由 crash reporter 生成并保存在单独的 `.crash` 文件中。但你可以通过组合筛选条件,**定位到含堆栈线索的日志条目**,尤其是那些由系统或应用主动记录的异常、崩溃或断言失败信息。
找含堆栈关键词的日志条目
崩溃和严重异常常在日志中留下明确标记,比如 “Exception”, “Backtrace”, “Stack dump”, “SIGABRT”, “EXC_CRASH” 等。这些字段通常出现在 eventMessage 中:
log show --predicate 'eventMessage contains[c] "exception" OR eventMessage contains[c] "backtrace" OR eventMessage contains[c] "stack"' --last 1hlog show --predicate 'eventMessage contains[c] "EXC_CRASH" OR eventMessage contains[c] "SIGSEGV"' --last 30m- 若已知应用名(如 Safari),可进一步限定:
log show --predicate 'process == "Safari" AND (eventMessage contains[c] "crash" OR eventMessage contains[c] "exception")' --last 1h
配合子系统与等级提升命中率
某些框架(如 libdispatch、CoreFoundation)或诊断子系统(com.apple.diagnosticd)更倾向记录带上下文的堆栈摘要。同时,使用 --level error 或 --level fault 可过滤出高优先级事件,减少干扰:
利用 macOS 原生能力实现本地语音识别与合成。通过 yap (Apple Speech.framework) 进行语音转文字,通过 say + ffmpeg 进行文字转语音。完全离线,无需 API 密钥。具备音质检测与智能选声功能。
log show --predicate 'subsystem == "com.apple.libdispatch" AND eventMessage contains[c] "unhandled"' --level fault --last 20m-
log show --predicate 'subsystem == "com.apple.CrashReporter"' --last 1h(该子系统会记录崩溃报告路径)
导出后用文本工具辅助分析
日志中堆栈往往跨多行,而 log show 默认按单条事件输出。建议先导出为文本再处理:
log show --predicate 'process == "YourApp" AND eventMessage contains[c] "exception"' --last 1h --info --debug > app_errors.log- 然后用
grep -A 10 -B 2 "Thread [0-9]\+" app_errors.log提取线程上下文段落 - 或用
less app_errors.log搜索 “#0”, “#1”, “frame” 等典型堆栈标识符
真正完整的堆栈要去哪找?
如果需要完整符号化解析的崩溃堆栈,请转向:
- 控制台 App:打开“控制台” → 左侧选“崩溃报告”,双击对应 .crash 文件,它会自动关联符号表(需已安装对应 macOS SDK 或 Xcode)
-
磁盘路径:
~/Library/Logs/DiagnosticReports/和/Library/Logs/DiagnosticReports/存放原始 .crash 文件 - Xcode Organizer:连接设备后,在 Xcode → Window → Organizer → Crashes 中查看已符号化堆栈

















