1. 程式人生 > >iOS-中捕獲程式崩潰日誌-NSSetUncaughtExceptionHandler

iOS-中捕獲程式崩潰日誌-NSSetUncaughtExceptionHandler

iOS開發中遇到程式崩潰是很正常的事情,如何在程式崩潰時捕獲到異常資訊並通知開發者,是大多數軟體都選擇的方法。下面就介紹如何在iOS中實現:

1. 在程式啟動時加上一個異常捕獲監聽,用來處理程式崩潰時的回撥動作
 NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler);
 官方文件介紹:Sets the top-level error-handling function where you can perform last-minute logging before the program terminates.
 UncaughtExceptionHandler
是一個函式指標,該函式需要我們實現,可以取自己想要的名字。當程式發生異常崩潰時,該函式會得到呼叫,這跟C,C++中的回撥函式的概念是一樣的。


2. 實現自己的處理函式
void UncaughtExceptionHandler(NSException *exception) {
 NSArray *arr = [exception callStackSymbols];//得到當前呼叫棧資訊
 NSString *reason = [exception reason];//非常重要,就是崩潰的原因
 NSString *name = [exception name];//異常型別

 NSLog(@"exception type : %@ \n crash reason : %@ \n call stack info : %@", name, reason, arr);

}

以上程式碼很簡單,但是帶來的作用是非常大的。

獲取到了崩潰的日子,如何傳送給開發者呢,目前一般有以下兩種方式:
1. 將崩潰資訊持久化在本地,下次程式啟動時,將崩潰資訊作為日誌傳送給開發者。

2. 通過郵件傳送給開發者。 不過此種方式需要得到使用者的許可,因為iOS不能後臺傳送簡訊或者郵件,會彈出傳送郵件的介面,只有使用者點選了傳送才可傳送。 不過,此種方式最符合蘋果的以使用者至上的原則。
傳送郵件程式碼也很簡單:
NSString *crashLogInfo = [NSString stringWithFormat:@"exception type : %@ \n crash reason : %@ \n call stack info : %@", name, reason, arr];

 NSString *urlStr = [NSString stringWithFormat:@"mailto://[email protected]?subject=bug報告&body=感謝您的配合!


"
 "錯誤詳情:%@",
 crashLogInfo];
 NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
 [[UIApplication sharedApplication] openURL:url];

以上就是iOS中捕獲異常常用的方法,大家可以不妨一試!

相關推薦

iOS-捕獲程式崩潰日誌-NSSetUncaughtExceptionHandler

iOS開發中遇到程式崩潰是很正常的事情,如何在程式崩潰時捕獲到異常資訊並通知開發者,是大多數軟體都選擇的方法。下面就介紹如何在iOS中實現:1. 在程式啟動時加上一個異常捕獲監聽,用來處理程式崩潰時的回撥動作 NSSetUncaughtExceptionHandler (&UncaughtExcep

iOS 捕獲程式崩潰日誌

iOS開發中遇到程式崩潰是很正常的事情,如何在程式崩潰時捕獲到異常資訊並通知開發者,是大多數軟體都選擇的方法。下面就介紹如何在iOS中實現:1. 在程式啟動時加上一個異常捕獲監聽,用來處理程式崩潰時的回撥動作 NSSetUncaughtExceptionHandler (&UncaughtExcep

iOS捕獲使用者的崩潰日誌

iOS開發中遇到程式崩潰是很正常的事情,如何在程式崩潰時捕獲到異常資訊並通知開發者,是大多數軟體都選擇的方法。下面就介紹如何在iOS中實現:1. 在程式啟動時加上一個異常捕獲監聽,用來處理程式崩潰時的回撥動作 NSSetUncaughtExceptionHandler (&UncaughtExcep

捕獲應用程式崩潰日誌

  作為一名iOS移動應用開發者,為了確保你的應用程式正確無誤,在將應用程式提交到應用商店之前,你必定會進行大量的測試工作;而且在你測試的過程中應用程式執行的很好,但是在應用商店上線之後,還是有使用者抱怨應用程式會“閃退”!現在作為應用程式的開發人員你肯定會

捕獲異常崩潰日誌(iOS)

在進行iOS開發的時候,有時會遇到app不能聯機(連線開發工具Xcode)除錯的情況;或者測試同事遇到了崩潰問題(不容易復現),要我們解決。類似的情況,我們可以在程式裡新增一段程式碼,把崩潰日誌儲存到本地,app再次啟動的時候把崩潰日誌傳送到我們的伺服器;然後,

ios的奇怪崩潰Signal和EXC_BAD_ACCESS錯誤分析

奔潰 ges bad strong 分享圖片 bject 文章 原子 exc 什麽是Signal 在計算機科學中,信號(英語:Signals)是Unix、類Unix以及其他POSIX兼容的操作系統中進程間通訊的一種有限制的方式。它是一種異步的通知機制,用來提醒進程一個事

Android 應用程式崩潰日誌捕捉

程式崩潰是應用迭代中不可避免的問題,即使有著5年或者10年經驗的程式猿也無法完全保證自己的程式碼沒有任何的bug導致崩潰,現在有一些第三方平臺可以幫助我們蒐集應用程式的崩潰,比如友盟,詳情如下圖 雖然能夠看到崩潰的日誌以及機型等,但還是不是很方便,如果需要精確定位的話需要使用者提供崩潰的時間點、機型

iOS使用dispatch_sync崩潰問題。總結

崩潰發現是這樣的,在維護專案過程中,有個地圖的功能,在地圖上會新增很多的標註物,但是我在測試過程中發現只要快速操作,比如連續點選放大地圖,就會出現崩潰現象。 崩潰點在dispatch_sync上面,使用同步縣城 dispatch_sync(dispatch_get_mai

ios改變程式的status bar

有兩種: 一、在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法中新增 [UIApplication

Android收集程式崩潰日誌

開個頭 程式崩潰是我們開發人員最不想看到的,但也是我們不可避免的。在我們開發階段,當程式發生崩潰的時候,我們需要根據列印的錯誤日誌來定位,分析,解決錯誤。但是當我們把應用釋出到應用市場的之後,使用者使用我們應用的時候因為各種原因程式發生了崩潰,這個是非常影響使

golang 根據啟動命令切換不同資料庫以及在中介軟體捕獲異常記錄日誌

dataBase := flag.Bool("MySql",false,"true :線上,false: 線下 預設:false") flag.Parse() //*dataBase=true db.InitDB(*dataBase) //初始化資料庫 根據 data

ios開發崩潰日誌log

typedef enum{ QFLogLevelFail = 0, QFLogLevelError, QFLogLevelWarning, QFLogLevelInfo, QFLogLevelDebug }QFLogL

iOS手動匯出dSYM檔案,用於解析崩潰日誌

符號表檔案.dSYM實際上是從Mach-O檔案中抽取除錯資訊而得到的檔案目錄,實際用於儲存除錯資訊的檔案是DWARF,其出身可以從這篇文章瞭解。 這個是我T9專案匯出的檔案路徑 /Appl

iOS崩潰類型

truct enable 進行 http arc product 包含 產生 abr http://blog.csdn.net/womendeaiwoming/article/details/44243571 OS中的崩潰類型 在這裏了解一下XCode用來表示

iOS 符號化崩潰日誌

term 崩潰 neo 文件 ica evel xcode 符號 ati 1、獲取一下三個文件 1. crash報告(.crash文件) 2. 符號文件 (.dsymb文件) 3. 應用程序文件 (appName.app文件,把IPA文件後綴改為zip,然後解壓,Pay

iOS崩潰日誌 如何看

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

iOS 獲取崩潰日誌

新建一個類CatchCrash @interface CatchCrash : NSObject void uncaughtExceptionHandler(NSException *exception); @end @implementation CatchCrash void un

iOS Xcode常見的幾種程式崩潰

導讀:記錄了常見的幾種程式程式碼崩潰的原因及解決方法。 1、報錯資訊 *** Terminating app due to uncaught exception 'NSRangeException', reason: 'NSMutableRLEArray objec

springboot程式logback日誌基本配置,多個包不同日誌級別輸入到檔案

日誌是程式中必不可少的內容。依據日誌我們可以有效診斷程式bug,統計使用者訪問和各主要功能的使用頻率時間段等資訊。因此我們會需要不同package使用不同的日誌級別,以及不同業務的日誌輸出到不同的檔案。下面本文簡要概述如何使用logback將不同包的不同級別日誌輸出到info1.txt中

iOS開發之崩潰日誌符號化及程式碼定位

提交應用到App Store時如果稽核被拒,可能會發送給我們一個崩潰日誌,如果提示資訊不足以讓我們知道崩潰在哪裡,那就使用以下這種通過定位日誌從而知道崩潰vc與行數。 // 回到你的打包介面 // 找到.dsYM檔案 這時回到iTunes con