個人對iOS崩潰日志分析的使用記錄。
一、無dsym文件:參考鏈接: https://www.cnblogs.com/ciml/p/7422872.html#commentform
主要使用了restore-symbol的一個工具,然后3步走:①修改工具restore-symbol權(quán)限 :chmod a+x restore-symbol处铛;②?我們拿到的崩潰日志來自arm64機器,所以先將二進制文件?CrashTest.app/CrashTest 瘦身 (必須正確選擇目標(biāo)CPU架構(gòu)類型,否則解析出來也是錯的呜笑,有的包可以跳過這一步):lipo -thin arm64 CrashTest -output CrashTest-arm64。接著用工具恢復(fù)符號表:./restore-symbol -o CrashTest-symbol CrashTest-arm64彻犁;③使用蘋果自帶命令行工具atos叫胁,將崩潰地址解析成具體函數(shù):atos -arch arm64 -o CrashTest-symbol -l 0x100030000 0x100034340 0x1000342b0。
# 簡單解釋一下這個命令汞幢,atos -arch CPU架構(gòu) -o 進制文件 -l 起始地址 ...一系列內(nèi)存地址 驼鹅; -l 后面跟的是模塊的起始地址,再后面可以羅列很多地址森篷,該命令會依次解析出具體函數(shù)输钩。最后輸出結(jié)果類似:-[ViewController getChild:] (inCrashTest-symbol) +64-[ViewController crashOnFunc:] (inCrashTest-symbol) +44。后面有的還會提示具體代碼錯誤行數(shù)
注意事項:有這樣個場景需要注意仲智,CrashTest.app/CrashTest原代碼文件必須與測試手機裝的版本一模一樣买乃,否則符號化后的函數(shù)以及具體地址是不正確的,或者在CrashTest原代碼改動小的情況下符號化后的函數(shù)以及具體地址是大概正確钓辆,但不準(zhǔn)確的剪验。那么就有一點需要注意,每個需要測試的版本或是上線的版本前联,都需要保存其CrashTest文件功戚。為什么說需要注意這點呢,因為其實諸如小公司開發(fā)似嗤,給測試安裝的包是不備份的啸臀,上線的有.xcarchive文件,里面可以找到線上的app文件烁落;甚至說這邊測試測著乘粒,開發(fā)的小伙伴(比如我)在那邊修改優(yōu)化一些代碼或刪除一些文件之類的席揽,造成比如一個V0.1.0,都是build1的版本谓厘,但無法完全解析出測試給出的崩潰代碼的正確函數(shù)及位置幌羞。
二、有dsym文件的其實網(wǎng)上資料比較多竟稳,這里記錄下自己的使用過程:
首先是.crash属桦、xx.app、xx.app.dSYM 3個文件的UUID需要一致(xx.app其實沒用到他爸,也可以不看)
1.查看 xx.app 文件的 UUID聂宾,terminal 中輸入命令 : dwarfdump --uuid xx.app/xx (xx代表你的項目名)
2.查看 xx.app.dSYM 文件的 UUID ,在 terminal 中輸入命令: dwarfdump --uuid xx.app.dSYM
3.查看 xx.crash 文件的 UUID:grep "AppName arm64"? a.crash(而不是原來友盟說的crash 文件第一行)
就是找到Xcode中的symbolicatecrash工具咯诊笤,路徑為:/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/A/Resources/symbolicatecrash系谐。
crash文件的分析
①.配置環(huán)境變量DEVELOPER_DIR,(配置好了就不再需要)export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer
②使用symbolicatecrash工具符號化崩潰日志: ./symbolicatecrash .crash文件 .dsym文件 > xxx.log?
③根據(jù)奔潰位置地址信息找到指定位置:dwarfdump--lookup?0x000cf358?--arch?armv7?appname.app.dSYM/
好吧讨跟,這個流程的3步是個人復(fù)制粘貼來的纪他,關(guān)鍵是定位不正確,感覺有點坑晾匠,也可能是個人流程錯誤茶袒。所以暫時還是使用無dsym文件的路程方案,之后可能還會來補下這里內(nèi)容凉馆。