【原创博文,转载请注明出处!】
Bugly iOS 符号表配置官方文档入口:https://bugly.qq.com/docs/user-guide/symbol-configuration-ios/?v=1492997248592
什么是符号表?
符号表是内存地址与函数名、文件名、行号的映射表。符号表元素如下所示:
<起始地址> <结束地址> <函数> [<文件名:行号>]
为什么要配置符号表?
为了能快速并准确地定位用户APP发生Crash的代码位置,Bugly使用符号表对APP发生Crash的程序堆栈进行解析和还原。
举一个例子,用对比说话:
通过上面的简单说明,我们大致了解到配置iOS符号表可以帮我们高效、准确地定位到引起iOS应用crash的函数堆栈所对应的类名,便于快速地解决问题。但是官方文档提供了几种不同的配置方案,看似很友好,但是不同的方案之间操作并没有讲清楚,很迷惑,照做下去可能踩坑且没有效果。
本人按照官方教程试了几种方法,强烈不推荐大家使用“配置Xcode编译执行脚本”方案,这样每次编译项目都会运行脚本,速度贼慢。下面将是我推荐的方案(反正你跟着我做就可以了)。
首先给Mac安装Java运行环境--->http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
打开链接,选择上图中红色圈出部分,下载Mac下的.dmg文件即可。下载完成之后双击便可一键式安装完毕。嗯,苹果安装软件就是这么滴简单。
###Question:如何验证Java环境成功安装?
Steps:
① .打开终端。
② .输入 java -version
③.如果成功了就没有这步了。如果没成功,那说明前面下载的Java运行环境有误。
安装成功了,终端会如下显示--->
嗯,上面我们将电脑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)
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文件。
不指定生成的符号表.zip文件路径时,默认生成的文件与我们刚刚指定的xx.app.dSYM文件同一位置,如下所示:
解决第④步:在bugly后台上传符号表文件(.zip格式包)
上传成功后直接点击上面“确定”就可以了。后台解析成功后会自动显示的(不放心的话过段时间你再看,如果不是这样算我输)
最后我们通过两张图来对比着看一下今天的劳动成果:
A:符号化之前函数调用栈地址B:符号化之后内存地址映射成对应类名
上面的例子是在iOS平台C++环境下开发游戏所发生的崩溃,C++层面的崩溃比iOS原生类的崩溃恶心很多,且Xcode对C++的崩溃给出的有用信息很少,借助bugly符号化对提高应用的稳定性很有帮助,相信如果是原生iOS开发,对于定位Objective-C或swift应该更友好!