淺談 iOS 之 Crash log 符號化

其實,對於作移動 APP 開發的同窗來講,質量和體驗都是同等重要的。一個 APP 應用若是常常「閃退」,是產品質量不好的一個體現,那麼用戶體驗就更不用再提了。html

淺談 iOS 之 Crash log 符號化


上面是筆者截取的國外一家公司對用戶行爲分析漫畫的一個片斷,從圖中能夠看到,有 80%的用戶會由於網絡錯誤和崩潰拋棄這個 APP,有 86% 的用戶,若是體驗太差,絕對不會第二次使用該 APP。因此開發一個優秀的 APP,性能即生死,必定儘可能杜絕「閃退」。數組

誠然,iOS 上的 APP 閃退有各類各樣的緣由,像三方庫不兼容、響應超時、內存不足都有可能形成 Crash。但更多狀況下多是 APP 程序自身的運行邏輯存在問題。好比調用用了 Objective-C 對象根本不支持的方法(發送消息),非法內存訪問,數組越界,參數不符合要求等。性能優化

這些問題在調試階段,咱們很容易經過給 Xcode 打斷點來進行調試, 但對於已發佈的 APP,若是想重現並利用上述辦法來解決,恐怕會比較費時費事。網絡

最有幫助最直接的辦法就是根據出現問題時的閃退日誌,分析和判斷 Crash 的緣由,快速準確的定位和解決。編輯器

##Crash log工具

在 iOS 上運行的 APP 出現 Crash 的時候,一般會生成一個 Crash log,記載問題發生時的具體情況。開發者能夠在 iTunes Connect 中特定 APP下找到收集上來的 Crash log。也能夠鏈接電腦,去本地目錄找 Mac :~/Library/Logs/CrashReporter/MobileDevice/<DEVICE_NAME> 這個時候你會發現一大堆的.crash 文件和.ips 文件。 淺談 iOS 之 Crash log 符號化性能

不過筆者仍是推薦第三種,經過 Xcode 獲取到崩潰日誌,方法是 Xcode->Window->Devices,想必不少開發者和筆者同樣,也都是用的是這個方法。開發工具

淺談 iOS 之 Crash log 符號化

經過上面三種方法收集到了 Crash log,但用文本編輯器打開文件是一堆十六進制的內存地址,你會鬱悶的發現壓根看不懂。這又是另外一個話題了。 ##Crash log 的分析 Crash log 裏面包含了 Crash 發生的 APP、運行軟硬件環境、發生時間、錯誤類型、方法調用異常棧、各線程狀態、寄存器和內存信息。優化

而其中對咱們開發人員來講意義最爲重大的,可能就是異常線程的調用棧. 惋惜有些時候,這關鍵的信息居然全是 16 進制的數據,因此咱們很難看懂。好比:網站

1CrashDebugInfoTest 0x1000c2b90 0x1000bc000 + 27536

那麼要從十六進制的地址碼,獲得咱們代碼中對應的方法調用,就須要結合調試信息對 Crash log 進行符號化。筆者查看了不少文檔,能符號化 Crash log 無非就 3 種方法:

1. 使用開發工具庫中自帶的 symbolicatecrash
2. 使用 atos
3. 使用 dwarfdump

前兩種方法方法,都簡單的試了一下,但並無以爲有多好用,atos 要想把十六進制的地址翻譯爲符號,須要每次給 APP 打包時生成的 dSYM 文件,我的以爲非常麻煩。而 symbolicatecrash 也是如此,每次都須要在終端輸入一些命令,也是勞心費神!

在這個當下這個這個注重效率的時代,筆者不認爲手動的去作這些事情是好的。若是能借助一些工具去解決事情,那就再好不過了。仔細找了找,國內外還真有一些三方工具能解決這個問題。

國外的好比 New Relic,還有國內 OneAPM 的Mobile Insight

他們不只解析了 Crash log,並且能將你全部的 Crash 進行分類,作成可視化的,不只能直觀的看到形成你 APP 崩潰的代碼行,並且幫你統計出這個崩潰是在哪一個iOS 系統和機型下發生的,這個崩潰影響了多少你的終端用戶,堆棧信息也一目瞭然。

淺談 iOS 之 Crash log 符號化

起初,筆者也不肯定他是否能將全部崩潰類型都能抓到,因而在 Github 上下載了CrashProbe-master,一個崩潰類型相對比較全的開源 Demo 親自測了一下,像常見的像無效內存地址,空指針未初始化指針,棧溢出形成的 SEGV:(Segmentation Violation)類型和線程異常形成的EXC_BAD_INSTRUCTION類型的崩潰等十幾種崩潰都抓取到了 ,感受仍是很驚訝。立馬和身邊一塊作項目的安卓同事唸叨了一下,他導入安卓的SDK 以後,簡單的模擬了幾個 Crash,神奇的是,居然還有崩潰軌跡,就是在發生崩潰以前你都進行了什麼操做,均可以看的到。當時,筆者內心就有點不平衡了,爲啥 iOS 就沒有,去問了他們的技術支持,說是下一期就能加上,非常期待啊!備註:本文已經獲得原做者的贊成,受權 OneAPM 技術博客進行轉載

OneAPM Mobile Insight 以真實用戶體驗爲度量標準進行 Crash 分析,監控網絡請求及網絡錯誤,提高用戶留存。訪問 OneAPM 官方網站感覺更多應用性能優化體驗,想閱讀更多技術文章,請訪問 OneAPM 官方技術博客

相關文章
相關標籤/搜索