iOS 崩潰日志分析

個人對iOS崩潰日志分析的使用記錄。

一、無dsym文件:參考鏈接: https://www.cnblogs.com/ciml/p/7422872.html#commentform

主要使用了restore-symbol的一個工具,然后3步走:①修改工具restore-symbol權(quán)限 :chmod a+x restore-symbol;②?我們拿到的崩潰日志來自arm64機器,所以先將二進(jìn)制文件?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 進(jìn)制文件 -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)容。

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

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

  • 什么是崩潰日志 iOS的App在崩潰時,系統(tǒng)會記錄下當(dāng)前的每個線程的調(diào)用棧信息等等,并保存到設(shè)備中。這些信息匯總起...
    handyTOOL閱讀 4,039評論 0 12
  • 作為一名自認(rèn)為很牛逼的程序員,當(dāng)你發(fā)現(xiàn)bug時你的內(nèi)心世界是這樣的: 當(dāng)你定位到bug,并花了一晚上把它改好,發(fā)現(xiàn)...
    穿山甲救蛇精閱讀 13,244評論 10 74
  • 補充2個概念(來源掘金翻譯): 什么是 dSYM 文件 Xcode編譯項目后,我們會看到一個同名的 dSYM 文件...
    蠟筆小強閱讀 730評論 2 5
  • 我是06年11月開的公眾號,名字叫江南可采蓮蓮葉何田田,當(dāng)時是因為個人的獨特經(jīng)歷,很想在那年的感恩節(jié)發(fā)一些個人已經(jīng)...
    四月槐花香閱讀 291評論 0 0
  • 本文與網(wǎng)絡(luò)請求框架那篇文章大致類似,但封裝的更為完善,介紹的也更詳細(xì),在項目中所有用到的網(wǎng)絡(luò)請求都需要該類參與。 ...
    隰有荷閱讀 508評論 0 1

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