一般log日記在哪里呢辕坝?在 ~/Library/Logs/CrashReporter/MobileDevice/<設(shè)備名》
什么樣的情況下會產(chǎn)生crash 日志呢?
1荐健,你的App違反了操作系統(tǒng)的政策酱畅;2,你的App有bug
關(guān)于違反操作系統(tǒng)的政策有如下情況:例如在啟動的時候看門狗超時江场,執(zhí)行纺酸,禁止或者退出;用戶強制退出址否,低內(nèi)存運行等吁峻。
看門狗超時
可能很多人都意識到了,自從ios4以后在张,當你視圖退出App時候用含,App不再結(jié)束,相反進入了后臺運行帮匾。
如果你的App響應(yīng)的不足夠快啄骇,你的操作系統(tǒng)將結(jié)束你的App和生成一個崩潰日志
這些事件的響應(yīng)就會在以下方法內(nèi)進行
- application:didFinishLaunchingWithOptions:
- applicationWillResignActive:
- applicationDidEnterBackground:
- applicationWillEnterForeground:
- applicationDidBecomeActive:
- applicationWillTerminate
以上方法得到了一個有限的時間內(nèi)去完成它的進程。如果你的App花費時間太久瘟斜,則操作系統(tǒng)會結(jié)束App缸夹。如果你在后臺線程執(zhí)行較長的運行操作(例如網(wǎng)絡(luò)存儲),這個很容易發(fā)生螺句,這時候就牽涉多線程的問題虽惭;
2,用戶強制退出
iOS4.x以后支持多任務(wù)蛇尚。如果一個App阻塞了UI芽唇,停止了響應(yīng),用戶能雙擊home鍵返回到主屏幕取劫。在這個情況下就會生成崩潰log匆笤。當你雙擊home鍵后,你能注意到你也得到了你在過去所有運行的App列表谱邪。這些App是沒有必要進行的炮捧,或者它們必須被禁止。
通常一個App一旦用戶點擊了home鍵后惦银,則會在后臺保持十分鐘咆课,然后被操作系統(tǒng)自動結(jié)束。刪除這些App的icon則不會生成崩潰log扯俱。
3书蚪,低內(nèi)存終止
當子類化UIViewController時,你會注意到一個方法-didReceiveMemoryWarning蘸吓。一個運行在前臺的任意App都有最高的優(yōu)先級去存儲和使用內(nèi)存善炫,然而這并不意味著App能得到這個設(shè)備上的可用內(nèi)存-每個App得到一部分可用的內(nèi)存。
當總內(nèi)存消耗到一個特定的等級后库继,操作系統(tǒng)發(fā)出UIApplicationDidReceiveMemoryWarningnotification,同時didReceiveMemoryWarning被調(diào)用箩艺。基于這一點宪萄,去使得你的App繼續(xù)恰當?shù)倪\行艺谆。操作系統(tǒng)開始終結(jié)這些App到后臺以釋放出一些內(nèi)存,一旦所有后臺的App被結(jié)束拜英,如果你的App仍然需要更多的內(nèi)存静汤,操作系統(tǒng)終結(jié)你的App并且生成崩潰日志。
3,App的bug
一般而言虫给,崩潰日志是由以下幾部分組成
3.1進程信息:意外的標示符(對于崩潰報告而言的統(tǒng)一標示符)藤抡,崩潰報告key(是被mapped到設(shè)備的統(tǒng)一的key,它是匿名的抹估,但是能給你有用的信息缠黍,如果你從同樣的崩潰報告key中得到了100個崩潰日志,說明問題并不是廣泛的药蜻,僅僅限制于一些設(shè)備或者少部分的設(shè)備)瓷式,硬件模型(表明設(shè)備的類型),process(App的名字)
3.2基本信息(包含崩潰的時間语泽,設(shè)備運行的ios版本)
3.3異常-可以看到異常的類型在崩潰的時刻被拋出
3.4 線程的往返-者提供了線程往返的日志對于App中的所有線程贸典。它一般有四行:1,幀數(shù) 2踱卵,二進制的名字 3廊驼,函數(shù)被調(diào)用的地址 4被分為二個字行 -一個基類地址和抵消
3.5 線程狀態(tài)-給你在注冊的時候給你一個值,通常而言這一塊是沒有必要被重視的颊埃,因為線程返回已經(jīng)給足夠的信息讓我們發(fā)現(xiàn)問題
3.6 二進制圖像-這一部分列舉了所有在崩潰的時候被加載的二進制文件蔬充。
異常的代碼
0x8badf00d ,這句代碼提示你App因為看門狗超時被操作系統(tǒng)終止了班利。通常App花費太長的時間去啟動或者響應(yīng)事件饥漫。
0xbad22222:這句代碼提示一個VoIP應(yīng)用被iOS結(jié)束,因為它執(zhí)行太過于頻繁
0xdead10cc:它提示app唄ios終結(jié)因為它在一個系統(tǒng)資源上持有罗标,當運行在后臺的時候庸队,通訊錄的數(shù)據(jù)庫
0xdeadfa11:它表明,一個應(yīng)用程序被用戶強行退出。每個蘋果,當用戶用力氣壓住開/關(guān)按鈕,直到出現(xiàn)“滑動關(guān)機”闯割。根據(jù)蘋果公司文檔,一個用力按住退出事件導(dǎo)致一個0 xdeadfa11異常代碼,大概是因為應(yīng)用程序變得反應(yīng)遲鈍彻消。
From:https://www.raywenderlich.com/23704/demystifying-ios-application-crash-logs