【原創(chuàng)博文,轉(zhuǎn)載請注明出處!】

Bugly iOS 符號表配置官方文檔入口:https://bugly.qq.com/docs/user-guide/symbol-configuration-ios/?v=1492997248592
什么是符號表?
符號表是內(nèi)存地址與函數(shù)名、文件名、行號的映射表。符號表元素如下所示:
<起始地址> <結(jié)束地址> <函數(shù)> [<文件名:行號>]
為什么要配置符號表?
為了能快速并準(zhǔn)確地定位用戶APP發(fā)生Crash的代碼位置,Bugly使用符號表對APP發(fā)生Crash的程序堆棧進(jìn)行解析和還原。
舉一個例子,用對比說話:

通過上面的簡單說明,我們大致了解到配置iOS符號表可以幫我們高效、準(zhǔn)確地定位到引起iOS應(yīng)用crash的函數(shù)堆棧所對應(yīng)的類名,便于快速地解決問題。但是官方文檔提供了幾種不同的配置方案,看似很友好,但是不同的方案之間操作并沒有講清楚,很迷惑,照做下去可能踩坑且沒有效果。
本人按照官方教程試了幾種方法,強(qiáng)烈不推薦大家使用“配置Xcode編譯執(zhí)行腳本”方案,這樣每次編譯項目都會運(yùn)行腳本,速度賊慢。下面將是我推薦的方案(反正你跟著我做就可以了)。
首先給Mac安裝Java運(yùn)行環(huán)境--->http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

打開鏈接,選擇上圖中紅色圈出部分,下載Mac下的.dmg文件即可。下載完成之后雙擊便可一鍵式安裝完畢。嗯,蘋果安裝軟件就是這么滴簡單。
###Question:如何驗證Java環(huán)境成功安裝?
Steps:
① .打開終端。
② .輸入 java -version
③.如果成功了就沒有這步了。如果沒成功,那說明前面下載的Java運(yùn)行環(huán)境有誤。
安裝成功了,終端會如下顯示--->

嗯,上面我們將電腦Java環(huán)境配置好了,下面還需要4個步驟才能結(jié)束今天的分享。
1.下載Bugly iOS符號表工具;
2.找到Bugly中對應(yīng)UUID的編譯后的包的dSYM文件;
3.使用下載下來的工具生成符號表文件(.zip格式包);
4.在bugly后臺上傳符號表文件(.zip格式包)。
一步步行動起來吧。
解決第①步:下載Bugly iOS符號表工具吧-->Bugly iOS符號表工具。
解決第②步:show in finder->顯示包內(nèi)容->dSYMs文件夾->找到和項目同名的.dSYM文件,即(項目名.app.dSYM)


Tips:可以在桌面新建一個文件夾,將找到的這個xx.app.dSYM文件還有第一步下載的符號表工具包中“buglySymboliOS.jar”文件放到新建的文件夾中,方便后續(xù)通過終端生成符號表.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文件路徑時,默認(rèn)生成的文件與我們剛剛指定的xx.app.dSYM文件同一位置,如下所示:

解決第④步:在bugly后臺上傳符號表文件(.zip格式包)
bugly符號表管理.png



上傳成功后直接點擊上面“確定”就可以了。后臺解析成功后會自動顯示的(不放心的話過段時間你再看,如果不是這樣算我輸)
最后我們通過兩張圖來對比著看一下今天的勞動成果:
A:符號化之前函數(shù)調(diào)用棧地址
B:符號化之后內(nèi)存地址映射成對應(yīng)類名

上面的例子是在iOS平臺C++環(huán)境下開發(fā)游戲所發(fā)生的崩潰,C++層面的崩潰比iOS原生類的崩潰惡心很多,且Xcode對C++的崩潰給出的有用信息很少,借助bugly符號化對提高應(yīng)用的穩(wěn)定性很有幫助,相信如果是原生iOS開發(fā),對于定位Objective-C或swift應(yīng)該更友好!
