在阅读完本书《iOS Crash Dump Analysis》后,我们对崩溃分析技巧进行一定的总结。
准备工作
崩溃报告的收集
线上或者开发环境的崩溃报告都可以利用第三方工具进行崩溃报告收集。让我们的应用程序能够尽可能的处理发生的所有可能的信号和异常,一旦应用程序将无法实现,从而导致底层操作系统触发崩溃。通过三方工具,对记录的崩溃信息进行收集,并且上传到服务器上。
自己基于
plcrashreporter
开发并继集成到服务器的成本需要用户自己考量
符号化
符号化 是将机器地址映射成对拥有源代码的程序员有意义的符号地址的过程。在使用三方的崩溃分析工具或者自建崩溃分析服务时,无论是构建Debug
版本还是构建 Release
版本,我们都应该在Xcode
中设置 DWARF with dSYM File
,以便我们能针对我们的每次构建都有一个匹配的 DSYM 文件。然后针对我们获取的崩溃报告进行符号化。保存好我们的ipa
文件和与之匹配的 DSYM
文件,为了后续使用的方便。
崩溃报告工具基本上就是使用 atos
命令来符号化崩溃报告,以及提供其他与系统相关的信息。
逆向工程
有时在我们的项目中,包含了第三方的二进制框架,我们并没有源代码。我们使用 Hopper
处理我们的ipa
文件,然后 rebase 反汇编程序,获取崩溃时地址与程序的地址相同。找到崩溃的堆栈。
分析故障排除法
分析故障排除法 提供了一个分析的方法来发现问题,便于问题的复现。在实际情况下,对于不同客户进行优先级筛选,并且针对不同的产品和产品变形,来自不同客户的崩溃报告也很多。科学的分析和找到问题。
确定问题的优先级
对于不崩溃或者是问题,优先级是不一样的。我们将从三个方法来思考问题:严重性、紧迫性和成长性。
-
根据影响确定优先级
崩溃将导致客户无法在我们的应用程序上执行任何操作。对我们来说,最迫切需要解决的崩溃问题,是影响我们收入的问题。社交类软件的聊天功能不容有失,电商类软件的购买支付流程十分重要等等。在应用程序中记录日志 来确定客户执行了什么操作。将最多最广泛的崩溃用例确定为最需要修复的崩溃问题。
一个软件的核心功能就是该软件最经常使用的功能
-
根据截止日期确定优先级
为了判断错误修复的紧迫性,我们需要评估与该错误相关的 截止日期