符號化的兩種方式:
1.利用Xcode符號化
2.利用symbolicatecrash腳本符號化
其實這兩種分析方式都使用了同一個工具符號化:***atos***。
atos是蘋果提供的符號化工具,在Mac OS系統(tǒng)下默認(rèn)安裝。
使用***atos***符號化需要dsym文件。dsym文件是在編譯工程的時候生成的,可以在Xcode Organizer的Archives標(biāo)簽欄下找到所有已歸檔的應(yīng)用文件。它保存了編譯過程的詳細(xì)信息,其中包括符號信息。
注意: 你必需同時保留應(yīng)用二進(jìn)制文件和.dSYM文件才能將崩潰日志完整符號化。每次提交到iTunes Connect的構(gòu)建都必需歸檔。.dSYM文件和二進(jìn)制文件是特定綁定于每一次構(gòu)建和后續(xù)構(gòu)建的,即使來自相同的源代碼文件,每一次構(gòu)建也與其他構(gòu)建不同,不能相互替換。如果你使用Build 和 Archive 命令,這些文件會自動放在適當(dāng)位置。 如果不是使用Build 和 Archive命令,放在Spotlight能夠搜索到的位置(比如Home目錄)即可。
atos用法:
atos -o dysm文件路徑 -l? 模塊load地址 -arch cpu指令集種類 調(diào)用方法的地址
atos -arch armv7 -o "StarMaker.app.dSYM" -l 0x66000 0x012c03e1
dysm文件路徑:可以在Xcode Organizer的Archives標(biāo)簽欄下找到所有已歸檔的應(yīng)用文件。它保存了編譯過程的詳細(xì)信息,其中包括符號信息。
模塊load地址:模塊加載的基地址,可以在日志的***動態(tài)庫信息***中找到對應(yīng)模塊的基地址。這里為0x66000
cpu指令集種類:可以為armv6 armv7 armv7s arm64。具體用哪個,可以參考對應(yīng)模塊的***動態(tài)庫信息***中確定。如
0x66000 -? 0x19cdfff +StarMaker armv7? <43ebe409980f31fd9be165a64b002af5> /var/mobile/Applications/E3B51E77-D44D-4B3E-8767-B7DC2008D138/StarMaker.app/StarMaker
1、Exception Type
1)EXC_BAD_ACCESS
此類型的Excpetion是我們最常碰到的Crash,通常用于訪問了不該訪問的內(nèi)存導(dǎo)致。一般EXC_BAD_ACCESS后面的"()"還會帶有補(bǔ)充信息。
SIGSEGV: 通常由于重復(fù)釋放對象導(dǎo)致,這種類型在切換了ARC以后應(yīng)該已經(jīng)很少見到了。
SIGABRT:? 收到Abort信號退出,通常Foundation庫中的容器為了保護(hù)狀態(tài)正常會做一些檢測,例如插入nil到數(shù)組中等會遇到此類錯誤。
SEGV:(Segmentation? Violation),代表無效內(nèi)存地址,比如空指針,未初始化指針,棧溢出等;
SIGBUS:總線錯誤,與 SIGSEGV 不同的是,SIGSEGV 訪問的是無效地址,而 SIGBUS 訪問的是有效地址,但總線訪問異常(如地址對齊問題)
SIGILL:嘗試執(zhí)行非法的指令,可能不被識別或者沒有權(quán)限