轉(zhuǎn)載鏈接:http://www.itdecent.cn/p/70414dd74b2c
挺久沒寫簡書了,這邊是比較早的時候?qū)懙墓P記這邊就給整理整理發(fā)到簡書上也比較規(guī)范點。網(wǎng)上看到關(guān)于日志解析的帖子也很多,本文就加入以下自己實際操作中的處理哈以及相應(yīng)的解決方式。當然除了自己解析日志也可以用現(xiàn)成的腳本來處理,以及第三方bugly只需要提供dSYM文件就可以給處理。氮素,有時候crash是devices上面的log這種就沒法直接解析了,就需要自己去處理。
準備
桌面上或者別的地方創(chuàng)建個文件夾(文件夾名logCrash)來存放相應(yīng)的文件,比較方便處理,當然不這么做的話在終端處理的時候需要輸入一堆的文件路徑還是比較煩的。
將以下的文件拷貝出來放入剛剛新建的文件夾里面。
1、dSYM文件
這邊需要注意版本匹配的問題,這個文件需要用的是崩潰日志對應(yīng)的包的dSYM文件,獲取步驟如下:
打開xcode->Window->Organzier->Archive->找到對應(yīng)的包->ShowinFinder

Archive.png
文件夾中顯示**** 2019-7-23, 13.53.xcarchive,顯示這個文件的包內(nèi)容就能看到文件夾dSYMs。
將****.app.dSYM復(fù)制到文件夾logCrash中。
2、校驗崩潰日志是否與dSYM文件匹配
獲取dSYM文件對應(yīng)的UUID
$ dwarfdump —u 文件路徑/xxx.app.dSYM或者$ dwarfdump--uuid xxx.app.dSYM
結(jié)果如下:
UUID: 89AE6EE9-B6A7-3AC2-B135-C588C72F9D4E (armv7) /Users/zhouyonggui/Desktop/1112yd/1.app.dSYM/Contents/Resources/DWARF/掌通家園園丁UUID: 4040D9C8-0FE1-39B1-80C4-37626E886A28 (arm64) /Users/zhouyonggui/Desktop/1112yd/1.app.dSYM/Contents/Resources/DWARF/掌通家園園丁
獲取崩潰日志中的UUID
打開崩潰日志,全局搜索Binary Images,獲取到如下:
BinaryImages:0x100554000-0x1037bbfff掌通家園園丁 arm64<4040d9c80fe139b180c437626e886a28>/var/containers/Bundle/Application/63FBF984-E4CC-4258-B758-C63177A296AC/掌通家園園丁.app/掌通家園園丁
如果兩者的UUID分別為:4040D9C8-0FE1-39B1-80C4-37626E886A28、4040d9c80fe139b180c437626e886a28是一致說明是同一個ipa包。
3、symbolicatecrash
這個最簡單的方式就是用終端命令查找symbolicatecrash
$ find/Applications/Xcode.app-name symbolicatecrash-typef
輸入如下,就是symbolicatecrash的文件路徑
/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework/symbolicatecrash
獲取到路徑后直接open打開
$open/Applications/Xcode.app/Contents/Developer/Platforms/WatchSimulator.platform/Developer/Library/PrivateFrameworks/DVTFoundation.framework
將symbolicatecrash復(fù)制到文件夾logCrash
4、crash日志
通過手機設(shè)備獲取日志的兩種方式:views Devices Logs、數(shù)據(jù)分析
1、views Devices Logs
崩潰日志這邊就以Xcode連接設(shè)備提取Devices中的崩潰日志為例。獲取方式如下:
打開Xcode->Windows->Devices and Simulators->選中真機設(shè)備->views Devices Logs
打開設(shè)備管理快捷鍵shift + cmd + 2,導(dǎo)出對應(yīng)的崩潰日志。
2、數(shù)據(jù)分析
打開手機設(shè)置:
設(shè)置-->隱私-->分析與改進-->分析數(shù)據(jù)-->找到對應(yīng)的日志-->傳輸?shù)诫娔X上即可
從上面的方式可以獲取到兩個文件:
一個是dSYM使用該文件解析日志會解析不全,因為從設(shè)備中取得的崩潰報告所需要的調(diào)試符號文件(.dsym)是為bitcode二進制并不能用來symbolicate崩潰報告;
另一個是崩潰日志.bate格式的,這邊可以直接修改文件格式為.crash。
3、線上崩潰報告
通過打包上線時的xcode來獲取線上的崩潰報告,線上app的崩潰日志會被app store收集并符號化分組。類似的崩潰報告的集合被稱為崩潰點。(如果用戶選擇了與蘋果共享診斷數(shù)據(jù),這些崩潰日志才會被收集并被符號化)

Xcode獲取崩潰.png
線上的這邊就沒一一介紹了,因為打包機不在我這邊,而且線上崩潰基本都是用第三方bugly主要是因為很多用戶(包括我本人)都喜歡關(guān)閉與蘋果共享數(shù)據(jù)哈。這邊推薦一個文章這塊寫的很贊的。
開始解析
獲取Xcode developer路徑,使用如下命令需要確保已經(jīng)安裝Xcode command line tools,使用$ xcode-select --install驗證,已經(jīng)安裝會提示如下:
xcode-select: error: command line tools are already installed, use "Software Update" to install updates
未安裝的可以安裝一下或者直接使用我這邊提供的路徑,當然前提是你未修改Xcode的安裝路徑以及Xcode的App名(如果已修改請自行另外獲取),終端獲取路徑:
$ xcode-select--print-path
輸出如下:
/Applications/Xcode.app/Contents/Developer
執(zhí)行export
$ export DEVELOPER_DIR='/Applications/Xcode.app/Contents/Developer'
如果未執(zhí)行export下一步解析的時候會報如下錯誤:
Error:"DEVELOPER_DIR"isnot defined at./symbolicatecrash line xx(數(shù)字).
解析堆棧
$ cd 文件夾logCrash$./symbolicatecrash./*.crash./*.app.dSYM>symbol.crash
正常以上處理就完成了,就能獲取到對應(yīng)的解析堆棧文件symbol.crash。如果出現(xiàn)以下警告,主要是因為我們在解析的時候沒有使用.app,當然這個警告不會影響解析:
## Warning:Unable to symbolicatefromrequired binary:/Users/zhouyonggui/Library/Developer/Xcode/iOS DeviceSupport/10.0.2(14A456)/Symbols/System/Library/Frameworks/CoreMotion.framework/CoreMotionNo symbolic information found
日志解析查看

日志解析.png
結(jié)語
上面介紹的可能不夠好,還有些偏差畢竟帶了很多個人的理解。所以還是強烈推薦看一看developer上的爽文Analyzing Crash Reports,也可以看看別人翻譯好的文章全面的理解和分析IOS的崩潰日志,翻譯好的雖然有些晦澀難懂,但是翻譯得還是很贊值得一閱。
參考