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

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

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

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

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


Tips:可以在桌面新建一個(gè)文件夾,將找到的這個(gè)xx.app.dSYM文件還有第一步下載的符號(hào)表工具包中“buglySymboliOS.jar”文件放到新建的文件夾中,方便后續(xù)通過(guò)終端生成符號(hào)表.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
簡(jiǎn)單說(shuō)明:上面是我使用終端生成自己項(xiàng)目的符號(hào)表.zip文件。

不指定生成的符號(hào)表.zip文件路徑時(shí),默認(rèn)生成的文件與我們剛剛指定的xx.app.dSYM文件同一位置,如下所示:

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



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

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