iOS版友盟錯(cuò)誤Application received signal SIGSEGV 找出野指針對(duì)象定位
友盟相關(guān)日志
錯(cuò)誤信息:
Application received signal SIGSEGV
錯(cuò)誤詳情:

錯(cuò)誤分析:
SIGSEGV和SIGBUS一般是由于訪問(wèn)已被釋放的內(nèi)存或者調(diào)用不存在的方法所致。
錯(cuò)誤定位:

vBell -- 應(yīng)用名稱
0x100475b80 -- 崩潰時(shí)的調(diào)用方法的16進(jìn)制函數(shù)地址
_ZNK6andjoy7RefBase9incStrongEPKv + 28 -- 文件的地址以及方法所在的行的位置
找出xcode 打的包路徑
接下來(lái)就是本文的重點(diǎn),將這條“密文”解析成“明文”了。
首先,要找到該項(xiàng)目發(fā)布時(shí)Archive編譯出來(lái)的.xcarchive文件。這個(gè)文件包含了.DSYM文件,可以通過(guò)XCode->菜單欄中的Window->Organizer,打開Archives列表,找到對(duì)應(yīng)的文件,點(diǎn)擊右鍵Show in Finder。


打開該文件,選中該文件,點(diǎn)擊右鍵 -> 顯示包內(nèi)容。



說(shuō)明:正常的話(該版本只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文件。

然后就要通過(guò)這個(gè)文件定位錯(cuò)誤信息了,共有三種方法:
只介紹方法一(使用電腦原生終端, 而且方法通用)
方法一:使用xcrun atos命令
【說(shuō)明:最靠譜!推薦使用該方法,特別是該項(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
