加入友盟統(tǒng)計(jì)功能后,友盟后臺(tái)會(huì)有一個(gè)錯(cuò)誤分析的統(tǒng)計(jì)項(xiàng),點(diǎn)進(jìn)去之后可以查看項(xiàng)目的錯(cuò)誤報(bào)告。對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),查看報(bào)告不是最終目的,找到錯(cuò)誤的原因才是最終目的。如何通過(guò)這堆報(bào)告定位到錯(cuò)誤的代碼呢?早上查了好些資料,終于成功了。
我們先看一下錯(cuò)誤報(bào)告是什么樣的:
這份報(bào)告所包含的主要信息有:
1、首行是錯(cuò)誤的原因。顯而易見(jiàn),以上的錯(cuò)誤是由于數(shù)組越界了。
2、打紅色馬賽克的地方是你的工程名字。
3、紅色馬賽克之間有一個(gè)淡綠色的地址,這就是錯(cuò)誤代碼的位置。
4、 dSYM UUID,這個(gè)是dSYM文件的唯一標(biāo)識(shí)。dSYM 是保存 16 進(jìn)制函數(shù)地址映射信息的中轉(zhuǎn)文件,我們調(diào)試的 symbols 都會(huì)包含在這個(gè)文件中,并且每次編譯項(xiàng)目的時(shí)候都會(huì)生成一個(gè)新的 dSYM 文件。
5、CPU Type. 定位錯(cuò)誤的時(shí)候,我們也需要用到這個(gè)參數(shù)。
定位錯(cuò)誤代碼,我們需要將 xx.app 和 xx.app.dSYM 文件找出來(lái).
1、在Windows->Organizer->archivers可以看到你的每一次的打包。然后選擇你要查看的錯(cuò)誤報(bào)告所在的版本,這個(gè)一定要選對(duì)了。
找到對(duì)應(yīng)的包后,點(diǎn)擊右鍵,然后選擇Show in Finder的選項(xiàng),查看這個(gè)包中的內(nèi)容,如圖
再右鍵選擇顯示包內(nèi)容,這時(shí)我們看到 有dSYMs,Products,SCMBlueprint三個(gè)文件夾,我們需要用到的是前兩個(gè)文件夾
此時(shí),將這倆文件夾中最里層的文件都取出來(lái),放到一個(gè)新的文件夾中
2.打開(kāi)終端,cd到剛才新建的文件夾(錯(cuò)誤報(bào)告)的目錄下
輸入命令xcrun atos -arch arm64 -o xxxx.app/xxxx 0x10019bc48
其中 arm64是CPU Type;
xxxx對(duì)應(yīng)的是你的工程名,也就是上文友盟錯(cuò)誤報(bào)告圖片中打紅色馬賽克的部分;
0x10019bc48 是錯(cuò)誤代碼的地址,也就是上文友盟錯(cuò)誤報(bào)告圖片中淡綠色的那個(gè)內(nèi)存地址。
其中-[SubscribeViewController isSubcribeSuccess:] (in woshiPM) (SubscribeViewController.m:342)
就是錯(cuò)誤代碼的位置,在SubscribeViewController.m
中的isSubcribeSuccess
方法中,342是代碼所在的行數(shù)。
這樣就可以在你的工程中找到相應(yīng)的代碼去做修改了。