如何分析 iOS 中的 Crash logs

12,196 阅读4分钟

这里每天分享一个 iOS 的新知识,快来关注我吧

前言

当你收到不可读的崩溃信息时,你可以在 Xcode 的帮助下对崩溃日志进行符号化。作为开发者,识别符号并确保能够修复这个崩溃至关重要。

我们很多开发者常用一些在线平台来统计和解决崩溃,比如 Firebase 和 Bugly 平台,它们将上报我们的线上崩溃信息日志。但是,在某些情况下,我们可以从控制台提取对应的崩溃文件,比如 IPS 文件,在读取这些日志之前,需要对符号进行符号化。今天就来讲讲相关的内容。

什么是 IPS文件?

IPS 文件是由应用程序生成的崩溃报告,这些应用程序将数据以 JSON 形式存储在 .ips 扩展名的文件中。这种文件格式最初是在 iOS 15 和 macOS 12 中引入的。JSON 包含两个主要对象:

  1. 在更高级别上描述崩溃的 IPS 元数据

  2. 崩溃报告,详细描述崩溃的数据以及线程信息

关于 IPS 文件,官方有解释崩溃报告的 JSON 格式文档可以查看。

崩溃报告数据由与操作系统版本、Bundle 相关、存储、异常、终止、线程、帧和二进制映像相关的其他对象组成。

什么是 dSYM文件?

dSYM 文件是由 Xcode 生成的调试符号文件,包含符号化崩溃日志所需的所有调试信息。换句话说,你可以使用 dSYM 文件来把不可读的崩溃日志转换为对应的可读格式。

dSYM 文件可以在你打包的时候生成并导出。

如何从 Xcode 导出崩溃报告?

安装了 Xcode 的同学可以按照以下步骤导出崩溃报告:

  1. 打开 Xcode

  2. 转到菜单栏,然后选择 Window -> Devices and Simulators

  1. 单击 Open Recent Logs

然后将打开一个 Finder 窗口,显示与设备相关的崩溃日志的所有 ips 文件。你可以右键单击你应用的最新崩溃文件,然后选择“在 Finder 中显示”,然后就可以找到这个文件了。

导出 Mac App 崩溃报告

如果你的 App 是 Mac 平台的,可以使用控制台应用导出崩溃报告:

  1. 打开控制台应用

  2. 在边栏中选择崩溃报告

  3. 鼠标右键选择“在访达中打开”导出以应用命名的崩溃

如何手动符号化

有一个开源的 Mac 软件可以用来解析崩溃报告,名叫 MacSymbolicator,打开之后长这样:

它支持解析旧版本的 .crash 文件,以及新的 .ips.txt 格式,将崩溃报告拖入左侧的框内,它会自动扫描电脑上的 dSYM 文件,如果找不到也可以手动拖入。

然后点击 Symbolicate 按钮,他就会自动帮我们解析这个崩溃了:

利用 Xcode Organizer 查找崩溃

Xcode Organizer 中也会显示崩溃的相关信息,这是 iOS 系统帮我们统计上来的,可以打开 Xcode Organizer 来查看有多少崩溃,选择 Xcode -> Windows -> Organizer,然后在弹出的窗口侧边栏中选择 Crashes,然后就可以看到对应的崩溃列表了:

使用这个工具的好处是:

  1. 它是被符号化后的,能看到具体崩溃的堆栈

  2. 它能看到具体的崩溃数量、设备等相关信息,可以以此分析影响范围

  3. 可以直接点击右上角的 Open in Porject 按钮来打开源码中对应的代码

但这个工具也有不好的地方,它统计上来的数据是不全的,不愿意跟 Apple 分享数据的设备无法被统计在内,我查了一下,大概只有 40% 不到的用户会被统计进来。

另外你还可以在右下角的 Notes 栏中针对这个 Crash 写一些备注,方便下次出现重复问题时解决,底部还有个按钮可以标记这个 Crash 已经被解决。

参考资料

[1]

解释崩溃报告的 JSON 格式: developer.apple.com/documentati…

[2]

MacSymbolicator: github.com/inket/MacSy…

这里每天分享一个 iOS 的新知识,快来关注我吧

本文同步自微信公众号 “iOS新知”,每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!