如何分析 iOS 中的 Crash logs

前言

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

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

什么是 IPS文件?

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

  • 在更高级别上描述崩溃的 IPS 元数据
  • 崩溃报告,详细描述崩溃的数据以及线程信息

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

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

什么是 dSYM文件?

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

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

如何从 Xcode 导出崩溃报告?

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

  • 打开 Xcode
  • 转到菜单栏,然后选择 Window -> Devices and Simulators
    在这里插入图片描述

单击 Open Recent Logs

在这里插入图片描述

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

导出 Mac App 崩溃报告

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

  • 打开控制台应用
  • 在边栏中选择崩溃报告
  • 鼠标右键选择“在访达中打开”导出以应用命名的崩溃
    在这里插入图片描述

如何手动符号化

有一个开源的 Mac 软件可以用来解析崩溃报告,名叫 MacSymbolicator,打开之后长这样:
在这里插入图片描述

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

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

在这里插入图片描述

利用 Xcode Organizer 查找崩溃

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

使用这个工具的好处是:

  • 它是被符号化后的,能看到具体崩溃的堆栈
  • 它能看到具体的崩溃数量、设备等相关信息,可以以此分析影响范围
  • 可以直接点击右上角的 Open in Porject 按钮来打开源码中对应的代码

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

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

参考资料

[1]

解释崩溃报告的 JSON 格式: https://developer.apple.com/documentation/xcode/interpreting-the-json-format-of-a-crash-report

[2]

MacSymbolicator: https://github.com/inket/MacSymbolicator

<think>好的,我现在需要帮助用户了解如何在iOS设备中导出崩溃日志。首先,我要回想自己之前学过的相关知识,确保信息的准确性。根据用户提供的引用内容,有几个方法可能适用。 首先,用户提到的引用[2]提到通过Xcode的Devices窗口来获取日志。我记得Xcode确实有这个功能,用户需要连接设备到Mac,然后在Window菜单里选择Devices,找到对应的设备,查看日志并导出。这可能是一个直接的方法,适合开发者使用。 然后,用户还提到了引用[1]中的步骤,需要将.crash文件、symbolicatecrash工具和.dSYM文件放在同一个文件夹中。这可能涉及到符号化崩溃日志的过程,但用户的问题主要是导出,所以这部分可能稍后再提,或者作为后续处理步骤。 另外,引用[3]提到在文件中直接查找crash信息,比如通过线程堆栈定位问题。这可能指的是直接访问设备上的日志文件,但iOS系统通常限制直接访问系统文件,除非设备越狱。不过,用户可能更关注合法且官方支持的方法。 接下来,我需要考虑不同的导出方式,比如通过Xcode、通过设备本身的设置,或者通过iTunes。对于普通用户来说,通过设置中的诊断与用量数据可能更简单,但需要知道如何操作。而开发者可能更倾向于使用Xcode,因为它提供了更详细的日志和导出功能。 还有一点要注意的是,iOS设备上的崩溃日志可能存储在哪里。根据经验,用户可以在设置→隐私→分析与改进中找到“分析数据”,里面会有以.log或.crash结尾的文件,这些就是崩溃日志。用户需要点击进入并分享到其他应用,比如邮件或者存储到文件应用,从而导出。 另外,是否需要在导出后进行符号化处理?虽然用户的问题主要是导出,但可能需要简要提到后续步骤,比如使用symbolicatecrash工具和dSYM文件解析日志,这样用户知道导出后的处理流程。 需要确认步骤的正确性,比如通过Xcode导出时是否需要开启调试模式,或者设备是否信任连接的电脑。这些都是潜在的问题点,但用户的问题集中在导出方法,可能不需要深入这些细节,除非遇到问题。 总结一下,导出崩溃日志主要有三种方法:通过Xcode的Devices窗口,通过设备设置中的分析数据,以及通过第三方工具如iTunes(但可能已不适用)。需要分步骤说明每种方法,确保用户能够跟随操作。同时,要提到导出后的处理,如符号化,但简要带过,避免信息过载。 最后,生成相关问题时要围绕崩溃日志的处理,比如如何分析、符号化的步骤,或者其他相关工具的使用。确保问题与主题相关,帮助用户进一步了解后续步骤。</think>### 如何从 iOS 设备中导出崩溃日志(Crash Log) #### 方法 1:通过 Xcode 导出(开发者常用) 1. **连接设备到 Mac**:使用 USB 数据线将 iOS 设备连接到电脑。 2. **打开 Xcode**:选择菜单栏中的 `Window -> Devices and Simulators`。 3. **选择设备**:在左侧设备列表中选择你的 iOS 设备。 4. **查看设备日志**:点击 `View Device Logs`,此时会显示所有崩溃日志(包括系统和其他应用的日志)。 5. **导出日志**:右键点击需要导出的 `.crash` 文件,选择 `Export Log` 并保存到本地[^2]。 #### 方法 2:通过设备设置导出(用户直接操作) 1. **进入分析数据**:打开 iOS 设备的 `设置 -> 隐私 -> 分析与改进 -> 分析数据`。 2. **查找崩溃日志**:列表中以 `.ips` 或 `.crash` 结尾的文件即为崩溃日志(iOS 15 后扩展名可能为 `.ips`)。 3. **导出日志**:点击目标文件,选择右上角的分享按钮,通过邮件或存储到文件 App 中导出[^3]。 #### 方法 3:通过第三方工具(如 iMazing) 1. **安装工具**:下载并安装第三方管理工具(如 iMazing)。 2. **连接设备**:通过 USB 连接 iOS 设备。 3. **导出日志**:在工具中找到 `Crash Logs` 选项,选择需要导出的日志并保存到本地。 #### 导出后的处理 - **符号化(Symbolication)**:原始崩溃日志包含内存地址,需使用 `.dSYM` 文件和 `symbolicatecrash` 工具解析为可读代码。 操作步骤:将 `.crash` 文件、`symbolicatecrash` 脚本和 `.dSYM` 文件放入同一目录,执行命令: ```bash ./symbolicatecrash <崩溃文件> <dSYM文件> > 输出文件.txt ``` [^1] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值