Bugly符號(hào)化iOS 崩潰,快速定位crash

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

當(dāng)前iOS游戲App捕獲crash接入的SDK是騰訊的bugly ,攔截到崩潰信息之后,往往對(duì)那些程序最后時(shí)刻的堆棧地址無(wú)從下手,想必小伙伴們都看到過(guò)類似的玩意兒吧??:
崩潰信息.png
一堆地址,怎么知道這個(gè)crash的具體信息呢?今天我們借助bugly上傳符號(hào)表就可以將這些地址映射成具體的類名。
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ō)話:

example.jpg

通過(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

Java.png

打開(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_installed.png

嗯,上面我們將電腦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)

找到xcode打包文件,顯示包內(nèi)容.jpg

找到與項(xiàng)目同名的.app.dSYM文件.jpg
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文件。

完整命令是java -jar 第一步下載的符號(hào)表工具包中“buglySymboliOS.jar”文件的路徑 -i你就是 第二步獲取到的xx.app.dSYM文件路徑。(Mac環(huán)境下直接將對(duì)應(yīng)的文件拖入到終端即可生成路徑,非常簡(jiǎn)單),這樣就可以生成我們需要的目標(biāo)符號(hào)表.zip文件了。終端運(yùn)行成功后的界面如下:
終端成功生成.zip符號(hào)表文件.png

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

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

bugly符號(hào)表上傳.png
upload successful.png

上傳成功后直接點(diǎn)擊上面“確定”就可以了。后臺(tái)解析成功后會(huì)自動(dòng)顯示的(不放心的話過(guò)段時(shí)間你再看,如果不是這樣算我輸)

最后我們通過(guò)兩張圖來(lái)對(duì)比著看一下今天的勞動(dòng)成果:

A:符號(hào)化之前函數(shù)調(diào)用棧地址
符號(hào)化之前函數(shù)調(diào)用棧地址.png

B:符號(hào)化之后內(nèi)存地址映射成對(duì)應(yīng)類名
符號(hào)化之后內(nèi)存地址轉(zhuǎn)換為對(duì)應(yīng)的類名.png

上面的例子是在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)該更友好!


圖片發(fā)自簡(jiǎn)書App
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是符號(hào)表? 符號(hào)表是內(nèi)存地址與函數(shù)名、文件名、行號(hào)的映射表。符號(hào)表元素如下所示: <起始地址> <結(jié)束地址> ...
    深圳陽(yáng)光閱讀 12,468評(píng)論 28 5
  • iOS Crash 流程化:一般的 Crash 日志解析方法TL;DR一、手動(dòng)解析 Crash 日志1、需要的相關(guān)...
    Vinc閱讀 5,914評(píng)論 0 7
  • 最近在做 Crash 分析方面的工作,發(fā)現(xiàn) iOS 的崩潰捕獲和堆棧符號(hào)化雖然已經(jīng)有很多資料可以參考,但是沒(méi)有比較...
    Joy___閱讀 15,617評(píng)論 15 143
  • 這篇文章,我不說(shuō)最基本的怎么看crash的棧,怎么定位crash的thread,希望看這篇文章的童鞋都有這個(gè)基礎(chǔ)。...
    小如99閱讀 1,878評(píng)論 0 0
  • 反思日志0717周一 晴 5:00起床 23:00睡覺(jué) 運(yùn)動(dòng):(重點(diǎn)關(guān)注右側(cè)大腿,髂腰肌及骶髂關(guān)節(jié)的拉伸放松,最終...
    娟妹紙李娟閱讀 280評(píng)論 0 0

友情鏈接更多精彩內(nèi)容