前言
????? 在iOS開發(fā)中祭刚,開發(fā)者需要面臨線上各種版本的崩潰日志墙牌,快速的解決崩潰問題,是開發(fā)者日常的工作之一捉捅,在實際的項目開發(fā)中虽风,遇到崩潰問題,我們可以依賴于Xcode无牵,依賴于系統(tǒng)記錄的崩潰日志合敦、斷點調(diào)試,或者錯誤堆棧信息保檐,定位到崩潰信息崔梗,可是如果在發(fā)布線上版本出現(xiàn)崩潰問題,開發(fā)者是無法準確獲取錯誤堆棧的扔亥,需要找到對應版本的崩潰日志旅挤,進行相應處理伞鲫。
對于沒有集成Bugly秕脓、友盟統(tǒng)計等第三方崩潰統(tǒng)計的應用來說挫掏,蘋果反饋的崩潰日志記錄了我們程序運行時崩潰的位置,但是打開崩潰日志你會發(fā)現(xiàn)如:示例_03 所示
二 傍药、解決方法
方法一 :利用symbolicatecrash腳本符號化
接下來我們一步一步將這些符號化為我們能夠看得懂的內(nèi)容 怔檩,具體步驟如下:
步驟一 :日志文件整理
1 桌面新建文件夾 Crash ,如:示例_04【備注:該文件夾用于存放符號化相關(guān)文檔】
文件目錄 :
1? 項目名稱.app.dSYM:文件存放 【 路徑:Xcode -> Window -> Organizer ->Archives -> 你上傳的版本 右鍵 Show In Finder -> 右鍵 顯示包內(nèi)容 -> dSYMS]
2 崩潰日志文件:a.crash b.crash? 【 路徑:示例_02 從蘋果被拒列表中下載 更改后綴為.crash】
3 項目名稱app : 【路徑:點擊1中dSYN文件 ->右鍵顯示包內(nèi)容->Contents -> Resources -> DWARF -> 項目名稱 】
4 symbolicatecrash:
??? 終端操作 :$?? find /Applications/Xcode.app -name symbolicatecrash -type f??? 【路徑:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash 】
步驟二 : 確認dSYM文件的UUID與統(tǒng)計的UUID一致
$? cd : Crash文件夾
$ dwarfdump --uuid 項目名稱.app.dSYM
步驟三 : 符號化
$ cd : Crash文件夾
$ export DEVELOPER_DIR="/Applications/XCode.app/Contents/Developer"
$ symbolicatecrash a.crash 項目名稱 > a01.crash
【備注 :a01.crash? 即為符號化的日志文件? 打開重點查看Last Exception Backtrace 如:示例-05】
方法二 : 蘋果系統(tǒng)提供的atos符號化工具
$ cd? 【Crash文件夾】
$ atos -o?? [app名稱路徑]? -arch [arm64乙埃、armv7]? -l?? loadAddress address
??? 說明:1? loadAddress:表示函數(shù)的動態(tài)加載地址,對應崩潰地址堆棧中 + 號前面的地址甫何,即0x1002fc000?? 2? address :表示運行時地址遇伞、對應崩潰地址堆棧中第一個地址,即0x00000001006cd2c0? 巍耗,實際上渐排,崩潰地址堆棧中+號前后的地址相加即是運行時地址驯耻,即0x1002fc000+ 4002496 = 0x00000001006cd2c0
解析后如:示例-06
方法三:使用第三方封裝的符號化工具
工具鏈接 : 鏈接 提取碼: h9gt
示例-07