1. 程式人生 > >iOS崩潰總結

iOS崩潰總結


一、捕獲iOS Crash

1、設定異常斷點並執行

設定異常斷點.png

說明:設定Xcode異常斷點後執行程式,發生Crash時,斷點會定位到出錯的程式碼行,但僅適用於開發階段。線上APP的Crash還需要通過收集Crash機制來捕獲Crash並記錄在日誌中。

2、Mach異常 和 Unix訊號

  • iOS Crash發生時,先產生Mach異常(最底層的核心級異常),然後Mach異常在host層被ux_exception轉換為相應的Unix訊號,並通過threadsignal將訊號投遞到出錯的執行緒。

  • 在捕獲Crash事件時,優選Mach異常。因為Mach異常處理會先於Unix訊號處理髮生,如果Mach異常的handler讓程式exit了,那麼Unix訊號就永遠不會到達這個程序了。而轉換Unix訊號是為了相容更為流行的POSIX標準(SUS規範),這樣就不必瞭解Mach核心也可以通過Unix訊號的方式來相容開發。

  • 在方案實現時,通過捕獲Mach異常+Unix訊號組合方式來捕獲Crash事件。在選擇具體方案時,可以選擇PLCrashReporter這樣優秀的開源專案,也可以選擇友盟、Bugly 這類完善的Crash上報和統計的產品(試專案需求而定)。

3、捕獲Crash

並不是所有的Crash都可以捕獲到NSException,如果捕獲不到,可以使用signal機制來捕獲Crash發生時的錯誤內容。

1) 可以捕獲的NSException,通過註冊NSUncaughtExceptionHandler捕獲異常資訊

//註冊異常處理函式

NSSetUncaughtExceptionHandler

(&uncaught_exception_handler);

//異常處理函式

staticvoiduncaught_exception_handler(NSException*exception){

//可以取到 NSException 資訊

//...

abort();

}

說明: 使用Objective-C的異常處理是不能得到signal的。

2) 無法捕獲的NSException,利用Unix標準的signal機制,註冊SIGABRT, SIGBUS, SIGSEGV等訊號發生時的處理函式。

//註冊處理SIGSEGV訊號

signal(SIGSEGV,handleSignal);

// 註冊處理其他訊號 ....

//訊號處理函式

staticvoidhandleSignal(intsig){

}

二、Crash日誌組成

上部分介紹了Crash的捕獲,這部分來看看Crash日誌的組成。

1、日誌內容Demo

日誌主要分為六個部分:程序資訊、基本資訊、異常資訊、執行緒回溯、執行緒狀態和二進位制映像。下面是從某APP具體的Crash日誌抽出的主要資訊,展示如下:

//1、程序資訊

HardwareModel: iPhone9,2

Process: AppName[3580]

Path: /var/containers/Bundle/Application/C7B90C8A-E269-4413-A011-552971D1ED39/AppName.app

Identifier: xxxx.xxx.xxxx.xxx

Version: xx.xx

CodeType: ARM-64(Native)

ParentProcess:  [1]

//2、基本資訊

Date/Time2017-05-2203:05:06.743 +0800

OSVersion: iPhoneOS10.2.1(14D27)

//3、異常資訊

ExceptionType: NSInvalidArgumentException(SIGABRT)

ExceptionCodes: -[NSNullintegerValue]: unrecognizedselector sent to instance0x1a9d88ef8at0x00000001835c7014

CrashedThread0

//4、執行緒回溯 (展示發生Crash執行緒的回溯資訊,其他略)

Thread0Crashed

0libsystem_kernel.dylib0x00000001835c7014__pthread_kill + 4

1libsystem_c.dylib0x000000018353b400abort + 140

2AppName0x0000000100a267040x0000000100028000 + 10479360

3CoreFoundation0x00000001845f9538___handleUncaughtException +  644

2CoreFoundation0x0000000184600268___methodDescriptionForSelector

3

相關推薦

iOS崩潰總結

一、捕獲iOS Crash 1、設定異常斷點並執行 設定異常斷點.png 說明:設定Xcode異常斷點後執行程式,發生Crash時,斷點會定位到出錯的程式碼行,但僅適用於開發階段。線上APP的Crash還需要通過收

iOS崩潰除錯的使用和技巧總結

本文是投稿文章,作者:劉小壯 在iOS開發除錯過程中以及上線之後,程式經常會出現崩潰的問題。簡單的崩潰還好說,複雜的崩潰就需要我們通過解析Crash檔案來分析了,解析Crash檔案在iOS開發中是比較常見的。 現在網上有很多關於解析崩潰資訊的部落格,但是大多質量

iOS 崩潰日誌分析(個人總結,最實用)

要分析奔潰日誌需要三個檔案:crash日誌,symbolicatecrash分析工具,.dSYM符號集 0. 在桌面建立一個crash資料夾 1. 需要Xcode自帶的崩潰分析工具symbolicatecrash,這個檔案的位置參考:/Applications/Xcode.

iOS - 面試總結

機制 不定 pack 目錄結構 沙盒目錄 ios多線程 必須 ken 隱藏參數 唐巧的一篇面試總結 設計模式是什麽? 你知道哪些設計模式,並簡要敘述? 設計模式是一種編碼經驗,就是用比較成熟的邏輯去處理某一種類型的事情。 1). MVC模式:Model View Con

iOS崩潰日誌 如何看

ffd 通過 1.0 san version sig cps fff pre 轉載至搜狗測試 日誌主要分為六個部分:進程信息、基本信息、異常信息、線程回溯、線程狀態和二進制映像。 我們在進行iPhone應用測試時必然會在“隱私”中找到不少應用的崩潰日誌,但是不會閱讀對於

五月這一篇百度 iOS 面試總結轟動整個開發界【頭條熱搜】

屬性 理解 開發 ext runtime 處理 主線程 現在 auto 百度移動雲可穿戴部門的面試經歷,面試官都非常熱情友好,一上來反倒弄的我挺不好意思的。下面記錄一下自己的面試過程,因為我真的沒啥面試經驗,需要總結下。 一面 Objective C runtime lib

iOS __attribute__ 總結

attribute是GNU C特色之一,在iOS用的比較廣泛.系統中有許多地方使用到. attribute可以設定函式屬性(Function Attribute )、變數屬性(Variable Attribute )和型別屬性(Type Attribute)等. 今天在研究iOS開發模組

2018 年 金九銀十 iOS 面試總結

今年9月中下旬因為個人原因,換了一份工作,期間面試了有4,5家,基本都是D輪或者上市公司,也從他們的面試筆試中看到了自己的一些不足,於是就想寫出來和大家分享一下,如果能幫到正在面試的同學更好。從面試題中,其實可以看到一些行業的發展,以及總體人才需求是怎樣的了。 作為一個開發者,有一個學習

DirectX程式設計中常見崩潰總結

1.在該傳入非空的地方傳入了空指標。通常是因為檢視呼叫某個函式,但是Buffer或者資源沒有初始化。 2.在該傳入空指標的地方傳入了已經存在資源的指標。一般常見於各種Create函式 3.釋放資源的時候該資源其實已經被其他地方釋放了,可能並非是該資源本身,而是已經被其他的資源給釋放了。例如V

iOS - 周總結】開發中遇到的小知識點(2018.12.03-2018.12.08)

補充:本文也是拖遲一週才更新的。也是由於專案原因。 時間:2018.12.03-2018.12.08 1.在主執行緒操作UI 在開發中我們一般只在主執行緒操作UI,但是在一些方法中我們會呼叫一下UI處理。這時候就會報出一些錯誤警告等。 1. UI API called from backgro

iOS 面試總結(上市公司·BAT·)

序言: 今年2月中下旬因為個人原因,換了一份工作,3月初期間面試了有3,4家,基本都是D輪或者剛剛上市的公司,也有上榜的BAT,也從他們的面試筆試中看到了自己的一些不足,於是就想寫出來和大家分享一下,如果能幫到正在面試的小夥伴更好。從面試題中,其實可以看到一些行業的發展,以

iOS - 周總結】開發中遇到的小知識點(2018.12.10-2018.12.15)

1.WKWebview載入html文字圖片過大,沒有自適應螢幕寬高。 在用Webview載入html文字有時候會遇到載入的圖片過大,不能自適應螢幕寬高的問題。那麼如何解決這個問題?如何使圖片自適應螢幕?很簡單,只需要加一個js就可以。 直接上程式碼: - (WKWebView *)detailWe

IOS 知識點總結(一)

###IOS執行緒講解 對於單核的處理器,可以把多個操作放到不同的執行緒,當用戶操作完UI之後其他後續任務在其他執行緒操作,當CPU空閒時繼續其他操作; 對於多核操作,操作任務可以分散到多個空閒的CPU中繼續執行; 一個核(CPU)可以有多個執行緒,但其實

iOS- 功能總結(1) -- ShareSDK登入與分享

最近專案中要整合分享與三方登入功能,我之前用的都是友盟分享,隊友把分享寫完了,用的是shareSDK,看了一下程式碼與網上的簡書,照著來了一次,感覺還不錯,有需求的同學可以直接學習。本文下面的步驟是轉載,先著名連結 http://www.jianshu.com/p/4be1105d4cc6

iOS - 周總結】開發中遇到的小知識點(2018.12.17-2018.12.22)

本週知識點遇到的少。 部分知識點是關於圖表的,已在前幾篇文章中顯示。 1.鍵值監聽要注意關閉 在一個播放視訊的頁面返回後,在6s上執行沒問題,可是在5s上執行會崩潰。我檢視日誌發現是kvo的問題。發現我在頁面消失後沒有去除觀察者。從而出現崩潰。 // 在viewdidload中 // 監聽播放

ios開發總結之 取絕對值

int abs(int i);                   // 處理int型別的取絕對值 double fabs(double i); //處理double型別的取絕對值 float fabsf(float i);           /處理float型別的

iOS 崩潰日誌 Backtrace的符號化

iOS的崩潰日誌配合dsym檔案可以找到崩潰時的backtrace,這是解決崩潰的最重要的資訊. 如果是在同一臺mac上打包, 匯入crash log時候會自動將backtrace符號化,可以看到方法名, 檔名和行號 但是,有時候發版的包不是在你的mac上打包的,xcode

iOS - 周總結】開發中遇到的小知識點(2018.12.24-2018.12.29)

1.float和double的精度問題。 在開發中我遇到一個問題就是四位或者五位小數的字串轉換成float後相加,在轉換成字串,數值不正確。我開始以為是後臺返回資料的問題,打印出來發現不是。只能想到是精度的問題。這時候我就轉換成double型別,發現結果就不會出錯了。   2.iOS自建證書不

iOS崩潰捕獲以及收集原理

通過崩潰捕獲和收集,可以收集到已釋出應用(遊戲)的異常,以便開發人員發現和修改bug,對於提高軟體質量有著極大的幫助,本文主要介紹iOS平臺下崩潰捕獲和收集的原理及步驟。 要實現崩潰捕獲和收集的步驟如

iOS崩潰分析

寫在前面:本文會在最開頭將蘋果官方的文件Understanding and Analyzing Application Crash Reports進行翻譯,但這不僅僅是一篇翻譯的文章,本文會讓大家更加全面的瞭解ios的崩潰報告的獲取、分析、用途。翻譯的時候我會結合自己以往的使用經驗來進行翻譯。 理解和