最近工作需要,項(xiàng)目中需要異常檢測
LSSafeProtector
LSSafeProtector
是一個(gè)可快速集成但功能強(qiáng)大的防止crash庫,不改變原代碼支持KVO自釋放,可以檢測到dealloc時(shí)未釋放的kvo旁赊,等19種crash,使用Objective-C編寫.
//注意線上環(huán)境isDebug一定要設(shè)置為NO)
[LSSafeProtector openSafeProtectorWithIsDebug:YES block:^(NSException *exception, LSSafeProtectorCrashType crashType) {
[Bugly reportException:exception];
//此方法相對于上面的方法致开,好處在于bugly后臺查看bug崩潰位置時(shí)屯断,不用點(diǎn)擊跟蹤數(shù)據(jù)步咪,再點(diǎn)擊crash_attach.log,查看里面的額外信息來查看崩潰位置
[Bugly reportExceptionWithCategory:3 name:exception.name reason:[NSString stringWithFormat:@"%@ 崩潰位置:%@",exception.reason,exception.userInfo[@"location"]] callStack:@[exception.userInfo[@"callStackSymbols"]] extraInfo:exception.userInfo terminateApp:NO];
}];
//打開KVO添加拳锚,移除的日志信息
[LSSafeProtector setLogEnable:YES];
[Bugly startWithAppId:@"5c825b6c8d"];
注意:
[Bugly reportExceptionWithCategory:3 name:exception.name reason:[NSString stringWithFormat:@"%@ 崩潰位置:%@",exception.reason,exception.userInfo[@"location"]] callStack:@[exception.userInfo[@"callStackSymbols"]] extraInfo:exception.userInfo terminateApp:NO];
- 在IPA包分發(fā)(例如
蒲公英
)時(shí),是會無法獲取錯(cuò)誤位置的寻行,官方介紹是由于ipa包安裝的crash日志是非源碼霍掺,無法直接分析定位,必須符號化拌蜘。xcode安裝是源碼安裝杆烁。
- 在這種自定義匯報(bào)情況,Bugly的手動上傳符號表也是無法解析的简卧。
- 好處是對新手非常友好兔魂,能夠提示bug位置,而缺點(diǎn)就是以上兩個(gè)問題举娩,
[Bugly reportException:exception];
相對來說析校,可以獲取到完整堆棧信息以及得到手動上傳符號表的支持(這一點(diǎn)非常重要)。 - 還有一個(gè)優(yōu)點(diǎn)铜涉,是bugly會把bug歸類智玻,標(biāo)記已解決的問題再次出現(xiàn)時(shí)不會有明顯提示,且過濾和搜索有些不準(zhǔn)確芙代,需要挨個(gè)查找吊奢。
Bugly
騰訊Bugly,為移動開發(fā)者提供專業(yè)的異常上報(bào)和運(yùn)營統(tǒng)計(jì)纹烹,幫助開發(fā)者快速發(fā)現(xiàn)并解決異常页滚,同時(shí)掌握產(chǎn)品運(yùn)營動態(tài),及時(shí)跟進(jìn)用戶反饋铺呵。
為什么要配置符號表裹驰?
為了能快速并準(zhǔn)確地定位用戶APP發(fā)生Crash的代碼位置,Bugly使用符號表對APP發(fā)生Crash的程序堆棧進(jìn)行解析和還原陪蜻。
符號表配置(只介紹iOS)
推薦使用官方的自動配置
注意點(diǎn):
- 下載符號表提取工具包
buglySymbolIOS.jar
需放在主目錄(Home)的bin目錄下(沒有bin文件夾,請自行創(chuàng)建)邦马;Tips:
換電腦打包時(shí)需要配置這個(gè)工具包 - 符號表上傳腳本
dSYMUpload.sh
按官方教程配置到工程里即可,需要修改成自己的APP_ID
等信息宴卖,完成這兩項(xiàng)即配置完成Bugly滋将。Tips:
可以自定義查找buglySymbolIOS.jar
包的目錄以及DEBUG
模式是否上傳等。 - bug上報(bào)的數(shù)量有待考證症昏,而且會不定程度延遲随闽。(當(dāng)然一般項(xiàng)目不會有大量bug,不像我們公司每天十幾個(gè)bug肝谭,幾百次異常記錄??)
-
dSYM符號表文件上傳不是一定能成功的>蛳堋6晟取!魏滚!
觸目驚心的上傳成功概率
符號表手動上傳
使用符號表手動上傳的主要目的镀首,是在自動上傳失敗的情況下輔助解析堆棧信息的。有多種方式可以獲取dsym文件鼠次,但目前只介紹獲取發(fā)布版本(也就是Archive
后的)的符號表更哄。
- 某一版本在
Archive
后(或在Xcode的Window的Organizer)選擇Show In Finder看到的.xcarchive
文件,右擊顯示包內(nèi)容 - 在
dSYMs
文件夾內(nèi)找到項(xiàng)目名稱的dSYM文件 - 在Bugly頁面的符號表管理頁面上傳腥寇,上傳完成后成翩,對應(yīng)版本的問題就可以看到解析后的堆棧信息了。
- 另外赦役,如果無法判斷是否問題和dSYM文件的版本是否對應(yīng)麻敌,即可從問題具體信息頁面進(jìn)入,查看UUID和找到的dSYM文件的UUID是否一致掂摔。查看本地dSYM文件UUID的指令:
xcrun dwarfdump --uuid <dSYM文件>
總結(jié)來說术羔,這雙劍合璧是極大程度保護(hù)了我們的軟件以及定位和解決bug。純屬個(gè)人經(jīng)驗(yàn)之談棒呛,使用過程中難免偏頗聂示,如有紕漏,望指正簇秒。