DevSupportiOS 开发工具iOS 进阶学习

Bugly符号化iOS 崩溃,快速定位crash

2018-05-05  本文已影响184人  RephontilZhou

【原创博文,转载请注明出处!】

当前iOS游戏App捕获crash接入的SDK是腾讯的bugly ,拦截到崩溃信息之后,往往对那些程序最后时刻的堆栈地址无从下手,想必小伙伴们都看到过类似的玩意儿吧☹️: 崩溃信息.png 一堆地址,怎么知道这个crash的具体信息呢?今天我们借助bugly上传符号表就可以将这些地址映射成具体的类名。
Bugly iOS 符号表配置官方文档入口:https://bugly.qq.com/docs/user-guide/symbol-configuration-ios/?v=1492997248592

什么是符号表?

符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:

<起始地址> <结束地址> <函数> [<文件名:行号>]

为什么要配置符号表?

为了能快速并准确地定位用户APP发生Crash的代码位置,Bugly使用符号表对APP发生Crash的程序堆栈进行解析和还原。

举一个例子,用对比说话:

example.jpg

通过上面的简单说明,我们大致了解到配置iOS符号表可以帮我们高效、准确地定位到引起iOS应用crash的函数堆栈所对应的类名,便于快速地解决问题。但是官方文档提供了几种不同的配置方案,看似很友好,但是不同的方案之间操作并没有讲清楚,很迷惑,照做下去可能踩坑且没有效果。

本人按照官方教程试了几种方法,强烈不推荐大家使用“配置Xcode编译执行脚本”方案,这样每次编译项目都会运行脚本,速度贼慢。下面将是我推荐的方案(反正你跟着我做就可以了)。

首先给Mac安装Java运行环境--->http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Java.png

打开链接,选择上图中红色圈出部分,下载Mac下的.dmg文件即可。下载完成之后双击便可一键式安装完毕。嗯,苹果安装软件就是这么滴简单。

###Question:如何验证Java环境成功安装?
Steps: 
① .打开终端。
② .输入  java  -version
③.如果成功了就没有这步了。如果没成功,那说明前面下载的Java运行环境有误。
安装成功了,终端会如下显示--->
java_installed.png

嗯,上面我们将电脑Java环境配置好了,下面还需要4个步骤才能结束今天的分享。

1.下载Bugly iOS符号表工具;
2.找到Bugly中对应UUID的编译后的包的dSYM文件;
3.使用下载下来的工具生成符号表文件(.zip格式包);
4.在bugly后台上传符号表文件(.zip格式包)。

一步步行动起来吧。

解决第①步:下载Bugly iOS符号表工具吧-->Bugly iOS符号表工具

解决第②步:show in finder->显示包内容->dSYMs文件夹->找到和项目同名的.dSYM文件,即(项目名.app.dSYM)

找到xcode打包文件,显示包内容.jpg
找到与项目同名的.app.dSYM文件.jpg
Tips:可以在桌面新建一个文件夹,将找到的这个xx.app.dSYM文件还有第一步下载的符号表工具包中“buglySymboliOS.jar”文件放到新建的文件夹中,方便后续通过终端生成符号表.zip文件。

解决第③步:

Rephontil:~ zhouyong$ java -jar /Users/zhouyong/Desktop/Demo/iOS_Bugly研究/target/buglySymboliOS.jar -i /Users/zhouyong/Desktop/Demo/iOS_Bugly研究/HelloCpp-mobile.app.dSYM 

简单说明:上面是我使用终端生成自己项目的符号表.zip文件。

完整命令是java -jar 第一步下载的符号表工具包中“buglySymboliOS.jar”文件的路径 -i你就是 第二步获取到的xx.app.dSYM文件路径。(Mac环境下直接将对应的文件拖入到终端即可生成路径,非常简单),这样就可以生成我们需要的目标符号表.zip文件了。终端运行成功后的界面如下: 终端成功生成.zip符号表文件.png
不指定生成的符号表.zip文件路径时,默认生成的文件与我们刚刚指定的xx.app.dSYM文件同一位置,如下所示: 生成的符号表.zip文件.png

解决第④步:在bugly后台上传符号表文件(.zip格式包) bugly符号表管理.png

bugly符号表上传.png upload successful.png

上传成功后直接点击上面“确定”就可以了。后台解析成功后会自动显示的(不放心的话过段时间你再看,如果不是这样算我输😊)

最后我们通过两张图来对比着看一下今天的劳动成果:

A:符号化之前函数调用栈地址 符号化之前函数调用栈地址.png
B:符号化之后内存地址映射成对应类名 符号化之后内存地址转换为对应的类名.png

上面的例子是在iOS平台C++环境下开发游戏所发生的崩溃,C++层面的崩溃比iOS原生类的崩溃恶心很多,且Xcode对C++的崩溃给出的有用信息很少,借助bugly符号化对提高应用的稳定性很有帮助,相信如果是原生iOS开发,对于定位Objective-C或swift应该更友好。

上一篇下一篇

猜你喜欢

热点阅读