iOS關于友盟錯誤分析“Application received signal SIGSEGV”報錯定位

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


錯誤詳情.png

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

錯誤定位:

單條錯誤詳情.png

XingYunGlobalMeeting -- 應用名稱
0x10020d274 -- 崩潰時的調用方法的16進制函數(shù)地址
XingYunGlobalMeeting + 2151028 -- 文件的地址以及方法所在的行的位置

接下來就是本文的重點,將這條“密文”解析成“明文”了。

首先,要找到該項目發(fā)布時Archive編譯出來的.xcarchive文件。這個文件包含了.DSYM文件,可以通過XCode->菜單欄中的Window->Organizer,打開Archives列表,找到對應的文件,點擊右鍵Show in Finder。

通過Organizer找到.xcarchive文件.png
在Finder中顯示.xcarchive文件.png
在Finder里所要的.xcarchive文件.png

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

xcarchive顯示包內容.png

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

根據(jù)UUID確定對應的.dSYM文件.png

然后就要通過這個文件定位錯誤信息了,共有三種方法:
方法一:使用xcrun atos命令
【說明:最靠譜!推薦使用該方法,特別是該項目的該版本重復Archive的話(即上一步驟有多個.dSYM文件)的話,下面的兩種方法可能不能使用】
1、選中上一步驟確定的對應.dSYM文件,點擊右鍵顯示包文件,按照路徑->Contents->Resources->DWARF,找到以項目名命名的文件。

顯示.dSYM文件中的包文件.png

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

方法一atos命令解析錯誤.png

方法二:使用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 輸入工具的文本框中,點擊分析。

dSYMTools.png

方法四:友盟錯誤分析工具
1、下載錯誤分析工具
,并解壓zip得到umcrashtool文件,可將umcrashtool與已下載的xxx.csv文件放入同一目錄下。
2、第二步 在terminal中運行umcrashtool命令,參數(shù)為錯誤分析的.csv文件絕對路徑,如下:sanzhang$ ./umcrashtool [absolutely_path_of_csv_file] 將umcrashtool與錯誤分析.csv文件放入同一目錄下

csv文件和umcrashtool放在同一目錄下.png

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ù)用工具分析錯誤。)

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容