浅谈 iOS 之 Crash log 符号化

其实,对于作移动 APP 开发的同窗来讲,质量和体验都是同等重要的。一个 APP 应用若是常常「闪退」,是产品质量不好的一个体现,那么用户体验就更不用再提了。html

浅谈 iOS 之 Crash log 符号化


上面是笔者截取的国外一家公司对用户行为分析漫画的一个片断,从图中能够看到,有 80%的用户会由于网络错误和崩溃抛弃这个 APP,有 86% 的用户,若是体验太差,绝对不会第二次使用该 APP。因此开发一个优秀的 APP,性能即生死,必定尽可能杜绝「闪退」。数组

诚然,iOS 上的 APP 闪退有各类各样的缘由,像三方库不兼容、响应超时、内存不足都有可能形成 Crash。但更多状况下多是 APP 程序自身的运行逻辑存在问题。好比调用用了 Objective-C 对象根本不支持的方法(发送消息),非法内存访问,数组越界,参数不符合要求等。性能优化

这些问题在调试阶段,咱们很容易经过给 Xcode 打断点来进行调试, 但对于已发布的 APP,若是想重现并利用上述办法来解决,恐怕会比较费时费事。网络

最有帮助最直接的办法就是根据出现问题时的闪退日志,分析和判断 Crash 的缘由,快速准确的定位和解决。编辑器

##Crash log工具

在 iOS 上运行的 APP 出现 Crash 的时候,一般会生成一个 Crash log,记载问题发生时的具体情况。开发者能够在 iTunes Connect 中特定 APP下找到收集上来的 Crash log。也能够链接电脑,去本地目录找 Mac :~/Library/Logs/CrashReporter/MobileDevice/<DEVICE_NAME> 这个时候你会发现一大堆的.crash 文件和.ips 文件。 浅谈 iOS 之 Crash log 符号化性能

不过笔者仍是推荐第三种,经过 Xcode 获取到崩溃日志,方法是 Xcode->Window->Devices,想必不少开发者和笔者同样,也都是用的是这个方法。开发工具

浅谈 iOS 之 Crash log 符号化

经过上面三种方法收集到了 Crash log,但用文本编辑器打开文件是一堆十六进制的内存地址,你会郁闷的发现压根看不懂。这又是另外一个话题了。 ##Crash log 的分析 Crash log 里面包含了 Crash 发生的 APP、运行软硬件环境、发生时间、错误类型、方法调用异常栈、各线程状态、寄存器和内存信息。优化

而其中对咱们开发人员来讲意义最为重大的,可能就是异常线程的调用栈. 惋惜有些时候,这关键的信息居然全是 16 进制的数据,因此咱们很难看懂。好比:网站

1CrashDebugInfoTest 0x1000c2b90 0x1000bc000 + 27536

那么要从十六进制的地址码,获得咱们代码中对应的方法调用,就须要结合调试信息对 Crash log 进行符号化。笔者查看了不少文档,能符号化 Crash log 无非就 3 种方法:

1. 使用开发工具库中自带的 symbolicatecrash
2. 使用 atos
3. 使用 dwarfdump

前两种方法方法,都简单的试了一下,但并无以为有多好用,atos 要想把十六进制的地址翻译为符号,须要每次给 APP 打包时生成的 dSYM 文件,我的以为非常麻烦。而 symbolicatecrash 也是如此,每次都须要在终端输入一些命令,也是劳心费神!

在这个当下这个这个注重效率的时代,笔者不认为手动的去作这些事情是好的。若是能借助一些工具去解决事情,那就再好不过了。仔细找了找,国内外还真有一些三方工具能解决这个问题。

国外的好比 New Relic,还有国内 OneAPM 的Mobile Insight

他们不只解析了 Crash log,并且能将你全部的 Crash 进行分类,作成可视化的,不只能直观的看到形成你 APP 崩溃的代码行,并且帮你统计出这个崩溃是在哪一个iOS 系统和机型下发生的,这个崩溃影响了多少你的终端用户,堆栈信息也一目了然。

浅谈 iOS 之 Crash log 符号化

起初,笔者也不肯定他是否能将全部崩溃类型都能抓到,因而在 Github 上下载了CrashProbe-master,一个崩溃类型相对比较全的开源 Demo 亲自测了一下,像常见的像无效内存地址,空指针未初始化指针,栈溢出形成的 SEGV:(Segmentation Violation)类型和线程异常形成的EXC_BAD_INSTRUCTION类型的崩溃等十几种崩溃都抓取到了 ,感受仍是很惊讶。立马和身边一块作项目的安卓同事念叨了一下,他导入安卓的SDK 以后,简单的模拟了几个 Crash,神奇的是,居然还有崩溃轨迹,就是在发生崩溃以前你都进行了什么操做,均可以看的到。当时,笔者内心就有点不平衡了,为啥 iOS 就没有,去问了他们的技术支持,说是下一期就能加上,非常期待啊!备注:本文已经获得原做者的赞成,受权 OneAPM 技术博客进行转载

OneAPM Mobile Insight 以真实用户体验为度量标准进行 Crash 分析,监控网络请求及网络错误,提高用户留存。访问 OneAPM 官方网站感觉更多应用性能优化体验,想阅读更多技术文章,请访问 OneAPM 官方技术博客

相关文章
相关标签/搜索