iOS 捕獲系統外異常 – iPhone手機開發技術文章 iPhone軟體開發教學課程

 

有時應用崩潰,而日志中的輸出信息太少,無法定位問題,這是最頭疼的事情,尤其很累的時侯,已經想不起來剛才改過什麼瞭,這就叫做無耐。

工欲善其事,必先利其器,下面的方法可以給多些信息,讓你看到堆棧執行順序,在哪裡崩潰的,也就能大概給個思路,確定問題的癥結。

在 AppDelegate.m 類實現之前加入:

 

void UncaughtExceptionHandler(NSException *exception) {
    
    // 獲取異常相關信息
    NSArray *callStackSymbols = [exception callStackSymbols];
    NSString *callStackSymbolStr = [callStackSymbols componentsJoinedByString:@
];
    NSString *reason = [exception reason];
    NSString *name = [exception name];
    
    // 獲取系統當前時間
    NSDate * date = [NSDate date];
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init ];
    [dateFormatter setDateFormat:@yyyy年MM月dd日 HH小時mm分ss秒];
    NSString * dateStr = [dateFormatter stringFromDate:date];
    
    NSLog(@系統當前時間為:%@ 
,dateStr);
    NSLog(@異常名稱:%@ 
,name);
    NSLog(@異常原因:%@ 
,reason);
    NSLog(@堆棧標志:%@ 
,callStackSymbolStr);
}

 

 

在 AppDelegate.m 類實現的應用啟動方法中加入如下語句,為系統設置異常回調函數為上面的聲明,詳細說明見 “iOS Foundation 框架概述文檔:常量、數據類型、框架、函數、發佈聲明”:

@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
    

 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *