錯誤信息:
Application received signal SIGSEGV
錯誤詳情:
錯誤分析:
SIGSEGV和SIGBUS一般是由于訪問已被釋放的內(nèi)存或者調(diào)用不存在的方法所致矢棚。
錯誤定位:
XingYunGlobalMeeting -- 應(yīng)用名稱
0x10020d274 -- 崩潰時的調(diào)用方法的16進制函數(shù)地址
XingYunGlobalMeeting + 2151028 -- 文件的地址以及方法所在的行的位置
接下來就是本文的重點,將這條“密文”解析成“明文”了。
首先疾棵,要找到該項目發(fā)布時Archive編譯出來的.xcarchive文件。這個文件包含了.DSYM文件相嵌,可以通過XCode->菜單欄中的Window->Organizer究恤,打開Archives列表,找到對應(yīng)的文件漆魔,點擊右鍵Show in Finder。
打開該文件却音,選中該文件改抡,點擊右鍵 -> 顯示包內(nèi)容。
說明:正常的話(該版本只Archive一次的話)系瓢,包里面dSYMs文件夾里只有一個以項目名稱命名的.app.dSYM文件(如上圖中的XingYunGlobalMeeting.app.dSYM文件)阿纤。如果同一版本重新Archive(即多次Archive)的話,會有多個.dSYM文件夷陋,此時我們就要根據(jù)友盟錯誤分析錯誤詳情里的倒數(shù)第五行的dSYM UUID確定對應(yīng)的.dSYM文件欠拾。
然后就要通過這個文件定位錯誤信息了,共有三種方法:
方法一:使用xcrun atos命令
【說明:最靠譜骗绕!推薦使用該方法藐窄,特別是該項目的該版本重復(fù)Archive的話(即上一步驟有多個.dSYM文件)的話,下面的兩種方法可能不能使用】
1酬土、選中上一步驟確定的對應(yīng).dSYM文件荆忍,點擊右鍵顯示包文件,按照路徑->Contents->Resources->DWARF撤缴,找到以項目名命名的文件刹枉。
2、打開終端Terminal屈呕,輸入 atos -o 微宝,然后把上一步中定位的文件拖入終端,補入文件路徑凉袱,空格芥吟,輸入友盟錯誤詳情中單條錯誤信息里的16進制函數(shù)地址(如:0x100037da4)
完整命令:
XingYundeMac-mini:~ xingyun$ atos -o /Users/xingyun/Library/Developer/Xcode/Archives/2017-03-20/XingYunGlobalMeeting\ 2017-3-20\ 下午7.20.xcarchive/dSYMs/D29F668F-D4A2-353E-97DC-CD9BFC78695E.dSYM/Contents/Resources/DWARF/XingYunGlobalMeeting 0x100037da4
3、終端返回我們看得懂得的“明文”錯誤信息:
__41-[MSSBrowseCollectionViewCell createCell]_block_invoke (in XingYunGlobalMeeting) (MSSBrowseCollectionViewCell.m:37)
發(fā)生崩潰的方法:-[MSSBrowseCollectionViewCell createCell]_block_invoke
崩潰所在源碼文件:MSSBrowseCollectionViewCell.m
發(fā)生崩潰的方法在源文件中的行號:37
方法二:使用dwarfdump命令
1专甩、可先將.app.dSYM文件拷貝到一目錄下備用钟鸵,如和崩潰日志放在一個目錄下。
2涤躲、打開終端棺耍,cd到該目錄下,執(zhí)行命令:
$ dwarfdump --arch=arm64 --lookup=[崩潰日志上項目對應(yīng)的某崩潰地址] [dSYM文件的絕對路徑]
方法三:可視化工具dSYMTools
下載鏈接(源碼):https://github.com/answer-huang/dSYMTools
下載后在Xcode中運行种樱,然后按照以下使用步驟進行:
1蒙袍、將打包發(fā)布軟件時的xcarchive文件拖入軟件窗口內(nèi)的任意位置(支持多個文件同時拖入俊卤,注意:文件名不要包含空格)
2、選中任意一個版本的xcarchive文件害幅,右邊會列出該xcarchive文件支持的CPU類型消恍,選中錯誤對應(yīng)的CPU類型。
3以现、對比錯誤給出的UUID和工具界面中給出的UUID是否一致狠怨。
4、將錯誤地址以及 Slide Address 輸入工具的文本框中邑遏,點擊分析佣赖。
方法四:友盟錯誤分析工具
1、下載錯誤分析工具
记盒,并解壓zip得到umcrashtool文件憎蛤,可將umcrashtool與已下載的xxx.csv文件放入同一目錄下。
2纪吮、第二步 在terminal中運行umcrashtool命令俩檬,參數(shù)為錯誤分析的.csv文件絕對路徑,如下:sanzhang$ ./umcrashtool [absolutely_path_of_csv_file] 將umcrashtool與錯誤分析.csv文件放入同一目錄下
3彬碱、在terminal中運行umcrashtool豆胸,提示如下: Usage: umcrashtool [export-file-path]奥洼,定位后的代碼及行數(shù)會寫入錯誤分析-symbol.csv文件巷疼,與原文件在同一目錄下。用工具打開新生成的xxx-symbol.csv文件灵奖,便可查看錯誤發(fā)生的源碼文件及行數(shù)嚼沿。
注:如果錯誤分析沒有成功,請先確保對應(yīng)的 xxx.dSYM 文件在 ~/Library/Developer/Xcode/ 或該路徑的子目錄下瓷患。(對于每一個產(chǎn)品發(fā)布時archive操作會將dsym文件存放到~/Library/Developer/Xcode/Archives路徑下骡尽,因此建議保留該路徑下的文件,以便后續(xù)用工具分析錯誤擅编。)