iOS開發之Crash分析,以及收集
一 先談談iOS的Crash收集方式:
1. APP 發生crash,使用者手機手機上肯定會有crash紀錄,當然刪除了該app,或是刪了再裝 crash紀錄還是沒了。
2. 如果使用者設定-隱私 同意的話,你的crash日誌會傳送到App store,你可以去賬號上去檢視crash日誌 。(PS:但是,這個要使用者自己同意,大部分人選的是不同意,我也選的不同意。可能你的賬號上根本沒有任何crash紀錄,這不代表你的app 沒有crash過。)
3.第三方日誌統計平臺,國外的比如Crashlytics,Hockeyapp,國內的也有 友盟,Bugly 等等。
4.當然也可以自己收集,開源專案很多,如 KSCrash,plcrashreporter,CrashKit 等。(PS:小公司的話,用用第三方的省心點。但是對安全性高的,並且有人力有時間情況下,還是自己實現收集吧,阿里 京東 這些公司肯定不會用 3.xxx ,都是有自己的收集服務。騰訊肯定用自家的Bugly )
現在聊聊選用方式:
1.大公司的話,老老實實 自己 實現收集。
2.中小公司的話如果是金融類或是涉及個人資料比較多的,並且使用者量特別巨大的,建議 也是老老實實自己收集。
3.如果你說我是金融類的,目前/以後 使用者不一定多,自己也沒時間 人力搞,那你就用國外的第三方。(PS:個人見解是,你的那點資料對於國外的平臺,人家不是很care,相對安全點。但是,用國內的第三方的話,不是說國內做的不好,而是更容易暴露 你的app 什麼什麼問題。)
4.中小公司涉及使用者安全不是很多的app,以及遊戲,可以考慮使用第三方 , 友盟 或是 Bugly 。
二 選擇友盟好還是Bugly好?
1.友盟很早就出了,資料統計,推送,crash統計,分享,IM 等 服務很多,也很全。小公司也用的多。(我之前有2個專案都用了友盟 )
2.Bugly ,看著騷氣的名字還以為是國外的第三方,其實是大企鵝出的,我記得剛出來時間不是很長,但是 騰訊出品,必屬精品 !騰訊產品,值得信耐! 打2句騷氣的廣告,因為最近要去騰訊面試,先奶一口。(ps:有一個專案用了Bugly!騰訊的信鴿推送我感覺比 極光 這些好多了。當年有對幾個平臺測試分析,遺憾的是 沒有紀錄下來!)
我個人推薦使用Bugly,騰訊自己的產品也都在用,Bugly定期也有分享文章,都是乾貨,大家可以去搜搜。
三 談談我之前處理一個crash 的經驗,僅做參考
去年某天,人事跟我講他在 app store 下載的 我們自己的app crash了。我當時就想,老子寫的app 竟然會crash?竟然會crash?
1. 我然後問了,哪個介面什麼操作導致的?可以復現嗎? 得到的結果是,在就診人列表,然後在點選 新增 就診人按鈕的時候 GG的。另外,不是必現的。
2. 我首先跑去 appstore 看下日誌統計,對 一個 紀錄都沒。(這就是要自己實現或是藉助第三方的原因。)
3. 讓測試 用不同機型 跟測。(測試復現率,然而n輪沒有再次crash,為什麼讓測試繼續測,主要是統計下復現率,另外測試的時候多點選下其他介面,有可能是其他頁面有記憶體洩漏,剛好在這個介面時候出了問題,估測下受潛在影響的使用者)
4. 我拿了那crash 的機子 ,匯出了crash日誌到 xcode ,點開日誌 並沒有直觀的顯示哪個地方crash。
5. 我看了下版本,crash 的 是 上個 小版本,目前線上的 這一塊 都有 重寫過,(git還原到上個版本)檢測下程式碼也沒啥問題。
然後只能通過crash和 .app 分析:
1. 建議 桌面 建 個資料夾 appxx ,然後 將那個閃退 對應的 包 xxx.app 放入 appxx資料夾
2. 開啟終端cd命令,進入該資料夾
3.在命令列輸入“dwarfdump --uuid XXX.app/XXX”
4.在終端中輸入以下命令“atos -o XXX.app/XXX -arch arm64 0x00000001006544f8 ”
“0x00000001006544f8” 這個地址是
檢視日誌搜尋“Triggered by Thread”:得到“Triggered by Thread: 0”,我們知道是0號執行緒閃退,找到0號執行緒得到如下:
Thread 0 Crashed:
0 libsystem_kernel.dylib 0x00000001833114bc mach_msg_trap + 8
1 libsystem_kernel.dylib 0x0000000183311338 mach_msg + 72
2 CoreFoundation 0x0000000183740ac0 __CFRunLoopServiceMachPort + 196
3 CoreFoundation 0x000000018373e7c4 __CFRunLoopRun + 1032
4 CoreFoundation 0x000000018366d680 CFRunLoopRunSpecific + 384
5 GraphicsServices 0x0000000184b7c088 GSEventRunModal + 180
6 UIKit 0x00000001884e4d90 UIApplicationMain + 204
7 XXX 0x00000001006544f8 0x10009c000 + 5997816
8 libdyld.dylib 0x000000018320e8b8 start + 4
XXX:就是你的XXX.app的名稱,找到他的第一個地址,這個地址就是要輸入的地址,如果存在多個地址,那麼直接在後面追加。
最後顯示,是因為友盟統計 的時候 報了錯,第一時間跟友盟技術客服溝通,然後他們有記錄下,承諾下個版本改進。然後我有查詢了一下,使用友盟確實有極小極小的奔潰率,我們app也不是第一個。當然在可接受範圍內。以上的crash分析 只是當時那個階段的解決方式,當然也有更合適的定位方案。
最後結論: 第三方也不要用太多,能自己實現的還是自己實現。
相關文章
- iOS開發之避免crashiOS
- iOS開發筆記— 資料庫、Crash、記憶體問題分析iOS筆記資料庫記憶體
- iOS 相容多個有crash 收集機制的SDKiOS
- iOS 防止Crash之runtimeiOS
- iOS 如何分析crash log 官方文件iOS
- 瞭解和分析iOS Crash ReportiOS
- iOS開發之版本控制以及去除過期警告iOS
- ios開發證書reset原理分析以及解決方案iOS
- Android Native Crash 收集Android
- iOS 開發:『Crash 防護系統』(一)Unrecognized SelectoriOSZed
- iOS研發助手DoraemonKit技術實現之Crash檢視iOS
- 跟我學 “Linux” 小程式 Web 版開發(四):引入統計及 Crash 收集LinuxWeb
- iOS 開發之— NSURLProtocoliOSProtocol
- iOS開發之WebViewiOSWebView
- iOS開發之GCDiOSGC
- iOS Crash不崩潰iOS
- 淺談iOS Crash(2)iOS
- 淺談iOS Crash(一)iOS
- crash日誌分析
- iOS之Wifi開發探究iOSWiFi
- iOS開發之逆向工程iOS
- iOS開發之Core AnimationiOS
- iOS App上線後收集Crash問題用到的第三方·BugHDiOSAPP
- iOS開發之OCR光學識別儲蓄卡以及信用卡iOS
- iOS開發 適配iOS10以及Xcode8iOSXCode
- 手把手教你檢視和分析iOS的crash崩潰iOS
- iOS-Crash日誌抓取iOS
- iOS中常見Crash總結iOS
- iOS: Crash檔案解析(一)iOS
- 回顧 crash log 分析
- iOS開發之FuckingBlockSyntax!iOSBloC
- iOS開發之 Autolayout 詳解iOS
- iOS開發之protocol和delegateiOSProtocol
- iOS開發之XLForm的使用iOSORM
- iOS開發之網路篇iOS
- IOS開發之sqlite框架FMDBiOSSQLite框架
- iOS開發之UICollectionViewDataSourcePrefetchingiOSUIView
- iOS開發之新浪圍脖iOS