標籤:
首先我們經常會閃退的異常有哪些呢?crash的產生來源於兩種問題:違反iOS策略被幹掉,以及自身的代碼bug。
1.IOS策略
1.1 低記憶體閃退
前面提到大多數crash日誌都包含著執行線程的棧調用資訊,但是低記憶體閃退日誌除外,這裡就先看看低記憶體閃退日誌是什麼樣的。
我們使用Xcode 5和iOS 7的裝置類比一次低記憶體閃退,然後通過Organizer查看產生的crash日誌,可以發現Process和Type都為Unknown:
1.2Watchdog逾時
Apple的iOSDeveloper Library網站上,QA1693文檔中描述了Watchdog機制,包括生效情境和表現。如果我們的應用程式對一些特定的UI事件(比如啟動、掛起、恢複、結束)響應不及時,Watchdog會把我們的應用程式幹掉,並產生一份響應的crash報告。
1.3 使用者強制退出
一看到“使用者強制退出”,首先可能想到的雙擊Home鍵,然後關閉應用程式。不過這種情境是不會產生crash日誌的,因為雙擊Home鍵後,所有的應用程式都處於後台狀態,而iOS隨時都有可能關閉後台進程,所以這種情境沒有crash日誌。
另一種情境是使用者同時按住電源鍵和Home鍵,讓iPhone重啟。這種情境會產生日誌(僅驗證過一次),但並不針對特定應用程式。
這裡指的“使用者強制退出”情境,是稍微比較複雜點的操作:先按住電源鍵,直到出現“滑動關機”的介面時,再按住Home鍵,這時候當前應用程式會被終止掉,並且產生一份相應事件的crash日誌。
通常,使用者應該是遇到應用程式卡死,並且影響到了iOS響應,才會進行這樣的操作——不過感覺這操作好進階,所以這樣的crash日誌應該比較少見。
2. 代碼bug
此外,比較常見的崩潰基本都源於代碼bug,比如數組越界、插空、Null 參考、引用未定義方法、多執行緒安全性、訪問野指標、發送未實現的selector等。
再來談談擷取iOS裝置上崩潰日誌(Crash Log)的方法
第一個方法:XCode 的菜單Window->Organizer 選擇Devices -> 選中的手機 -> 點擊手機名稱左邊的箭頭 會等到如
在右邊豎藍色矩形框中 Type裡面出現兩種類型:Unknown和Crash 這兩種類型分別是 記憶體不夠回收記憶體kill應用程式導致Crash和程式異常Crash的日誌。
第二種方法 開啟手機 - > 設定 -> 通用 - > 關於本機 - > 診斷與用量 - > 診斷與用量資料 這裡面就是所有應用的Crash日誌。(本人沒找到這個)
第三種方法 使用第三方軟體:itools等
如果你平時不用iTunes,而是使用itools這類第三方的軟體對iPhone裝置進行管理,也是沒問題的。
開啟itools,在你的裝置下,找到“進階功能”,點擊“崩潰日誌”,然後將需要的日誌匯出到電腦裡面就可以了!
第四種方法 通過iTunes Connect(Manage Your Applications - View Details - Crash Reports)擷取使用者的crash日誌
大部分使用者可能都會使用iTunes軟體來管理iPhone或者iPad裝置,這時候同步的Crash日誌就會同步到電腦上,我們只需要在特定的路徑裡面尋找即可。
Mac OS X:~/Library/Logs/CrashReporter/MobileDevice
Windows XP:C:\Documents and Settings\Application Data\Applecomputer\Logs\CrashReporter
Windows 7/Vista: C:\Users\電腦登入名稱\AppData\Roaming\AppleComputer\Logs\CrashReporter\MobileDevice
ios crash的原因與抓取crash日誌的方法