iOS版友盟錯(cuò)誤Application received signal SIGSEGV
找出野指針對(duì)象定位
友盟相關(guān)日志
錯(cuò)誤信息:
Application received signal SIGSEGV
錯(cuò)誤詳情:
錯(cuò)誤分析:
SIGSEGV和SIGBUS一般是由于訪問已被釋放的內(nèi)存或者調(diào)用不存在的方法所致而钞。
錯(cuò)誤定位:
vBell -- 應(yīng)用名稱
0x100475b80 -- 崩潰時(shí)的調(diào)用方法的16進(jìn)制函數(shù)地址
_ZNK6andjoy7RefBase9incStrongEPKv + 28 -- 文件的地址以及方法所在的行的位置
找出xcode 打的包路徑
接下來就是本文的重點(diǎn)比原,將這條“密文”解析成“明文”了秃殉。
首先,要找到該項(xiàng)目發(fā)布時(shí)Archive編譯出來的.xcarchive文件草添。這個(gè)文件包含了.DSYM文件痊夭,可以通過XCode->菜單欄中的Window->Organizer毅厚,打開Archives列表愕够,找到對(duì)應(yīng)的文件,點(diǎn)擊右鍵Show in Finder浪讳。
打開該文件缰盏,選中該文件,點(diǎn)擊右鍵 -> 顯示包內(nèi)容淹遵。
說明:正常的話(該版本只Archive一次的話)乳规,包里面dSYMs文件夾里只有一個(gè)以項(xiàng)目名稱命名的.app.dSYM文件(如上圖中的XingYunGlobalMeeting.app.dSYM文件)。如果同一版本重新Archive(即多次Archive)的話合呐,會(huì)有多個(gè).dSYM文件暮的,此時(shí)我們就要根據(jù)友盟錯(cuò)誤分析錯(cuò)誤詳情里的倒數(shù)第五行的dSYM UUID確定對(duì)應(yīng)的.dSYM文件。
然后就要通過這個(gè)文件定位錯(cuò)誤信息了淌实,共有三種方法:
只介紹方法一(使用電腦原生終端, 而且方法通用)
方法一:使用xcrun atos命令
【說明:最靠譜冻辩!推薦使用該方法,特別是該項(xiàng)目的該版本重復(fù)Archive的話(即上一步驟有多個(gè).dSYM文件)的話拆祈,其他兩種方法可能不能使用】
1恨闪、選中上一步驟確定的對(duì)應(yīng).dSYM文件,點(diǎn)擊右鍵顯示包文件放坏,按照路徑->Contents->Resources->DWARF咙咽,找到以項(xiàng)目名命名的文件。
2淤年、打開終端Terminal钧敞,輸入 atos -o ,然后把上一步中定位的文件拖入終端麸粮,補(bǔ)入文件路徑溉苛,空格,輸入友盟錯(cuò)誤詳情中單條錯(cuò)誤信息里的16進(jìn)制函數(shù)地址(如:0x100037da4)
完整命令:
sunlindeMac-mini:~ sunlin$ atos -o /Users/sunlin/Library/Developer/Xcode/Archives/2017-06-12/vBell\ 2017-6-12\ 上午11.45.xcarchive/dSYMs/vBell.app.dSYM/Contents/Resources/DWARF/vBell 0x100475b80
3弄诲、終端返回我們看得懂得的“明文”錯(cuò)誤信息:
__41-[MSSBrowseCollectionViewCell createCell]_block_invoke (in XingYunGlobalMeeting) (MSSBrowseCollectionViewCell.m:37)
發(fā)生崩潰的方法:andjoy:
崩潰所在源碼文件::RefBase::incStrong(void const*) const (in vBell)
發(fā)生崩潰的方法在源文件中的行號(hào): 28