前阵子处理一个线上反馈:用户说 App 用着用着就闪退,问他操作了什么,答不上来,手机型号、系统版本倒是记得。这种时候最需要的是设备上的日志和崩溃报告——崩溃原因、调用堆栈、崩溃前系统状态都在里面。iOS 设备的日志体系比很多人想的多,这篇把查看 iOS 设备日志与崩溃报告的方法完整过一遍。

日志体系有什么

iOS 设备上的日志体系分四类:实时系统日志(System Logs)记录系统和 App 运行时的输出;应用崩溃报告(Crash Reports)保存每次崩溃的现场;性能诊断数据(Diagnostics)记录系统诊断信息;网络活动记录(Network Traces)记录网络相关日志。崩溃排查主要用前两类,诊断和网络记录在特定问题上有补充价值。

查看路径

查看路径不复杂:设备连上电脑,在 克魔助手(KeyMob) 里进入文件管理模块,点日志文件,右侧面板会列出日志分类目录树,按目录翻就行。全程不需要越狱,设备上有什么日志就能看什么。

日志分类说明

目录树里的几类日志对应不同内容:CrashReporter 目录是应用崩溃报告,文件以 .ips 和 .synced 结尾;Logs/Apple 目录是系统核心日志,.log 和 .trace 格式;Diagnostics 目录是性能诊断数据,.diag 格式;WiFi 目录是无线连接记录,.plist 格式。找崩溃原因先翻 CrashReporter,找系统行为翻 Logs/Apple。

崩溃报告怎么看

崩溃报告的命名规则很直观:应用名-日期-时间.ips,比如 Twitter-2025-03-27-140847.ips,从文件名就能知道是哪天哪个时刻崩溃的。点开文件看内容:崩溃类型、异常代码、线程堆栈都在里面。原始 .ips 是符号化前的格式,直接读很费劲——克魔助手可以对苹果崩溃日志做符号化、格式化处理,把十六进制地址还原成函数名和行号,崩溃在哪一行代码一眼可见。

实时日志怎么过滤

实时日志这块,设备连着的时候可以直接看运行中的输出。Xcode 的 Console 也能看设备日志,但过滤能力弱,输出量大时翻起来费劲。用 KeyMob 的日志查看可以按指定进程、App 名称和关键字过滤,想看哪个进程的输出就筛哪个,device logs 和 NSLog 都在一个入口里,不用在多个面板之间切。

场景举个例子:支付流程报错,先按 App 名称筛出自己应用的日志,再用关键字搜报错码,把相关的几行拎出来看,比整屏滚动快得多。复现问题的时候开着实时日志操作一遍,崩溃或报错瞬间的输出就是第一手线索。

崩溃报告的管理

崩溃报告还支持导出和删除:分析完导出留档,或者直接删掉设备上堆积的旧报告。定期清理崩溃报告还有个好处——下次崩溃时新报告不被旧文件淹没,定位更干净。

日志和崩溃报告是排查线上问题的一手资料,关键是知道去哪拿、怎么读。把查看路径固定下来,崩溃反馈来了直接查,比反复让用户录屏高效得多。