錯誤信息:
Application received signal SIGSEGV
錯誤詳情:

錯誤分析:
SIGSEGV和SIGBUS一般是由于訪問已被釋放的內存或者調用不存在的方法所致。
錯誤定位:

XingYunGlobalMeeting -- 應用名稱
0x10020d274 -- 崩潰時的調用方法的16進制函數(shù)地址
XingYunGlobalMeeting + 2151028 -- 文件的地址以及方法所在的行的位置
接下來就是本文的重點,將這條“密文”解析成“明文”了。
首先,要找到該項目發(fā)布時Archive編譯出來的.xcarchive文件。這個文件包含了.DSYM文件,可以通過XCode->菜單欄中的Window->Organizer,打開Archives列表,找到對應的文件,點擊右鍵Show in Finder。



打開該文件,選中該文件,點擊右鍵 -> 顯示包內容。

說明:正常的話(該版本只Archive一次的話),包里面dSYMs文件夾里只有一個以項目名稱命名的.app.dSYM文件(如上圖中的XingYunGlobalMeeting.app.dSYM文件)。如果同一版本重新Archive(即多次Archive)的話,會有多個.dSYM文件,此時我們就要根據(jù)友盟錯誤分析錯誤詳情里的倒數(shù)第五行的dSYM UUID確定對應的.dSYM文件。

然后就要通過這個文件定位錯誤信息了,共有三種方法:
方法一:使用xcrun atos命令
【說明:最靠譜!推薦使用該方法,特別是該項目的該版本重復Archive的話(即上一步驟有多個.dSYM文件)的話,下面的兩種方法可能不能使用】
1、選中上一步驟確定的對應.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=[崩潰日志上項目對應的某崩潰地址] [dSYM文件的絕對路徑]
方法三:可視化工具dSYMTools
下載鏈接(源碼):https://github.com/answer-huang/dSYMTools
下載后在Xcode中運行,然后按照以下使用步驟進行:
1、將打包發(fā)布軟件時的xcarchive文件拖入軟件窗口內的任意位置(支持多個文件同時拖入,注意:文件名不要包含空格)
2、選中任意一個版本的xcarchive文件,右邊會列出該xcarchive文件支持的CPU類型,選中錯誤對應的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ù)。
注:如果錯誤分析沒有成功,請先確保對應的 xxx.dSYM 文件在 ~/Library/Developer/Xcode/ 或該路徑的子目錄下。(對于每一個產(chǎn)品發(fā)布時archive操作會將dsym文件存放到~/Library/Developer/Xcode/Archives路徑下,因此建議保留該路徑下的文件,以便后續(xù)用工具分析錯誤。)