1. 程式人生 > >捕獲異常崩潰日誌(iOS)

捕獲異常崩潰日誌(iOS)

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

NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);

2> 實現捕獲異常日誌並儲存到本地的方法。

void UncaughtExceptionHandler(NSException *exception){

    // 異常日誌獲取
    NSArray  *excpArr = [exception callStackSymbols];
    NSString *reason = [exception reason];
    NSString *name = [exception name];

    NSString *excpCnt = [NSString stringWithFormat:@"exceptionType: %@ \n reason: %@ \n stackSymbols: %@"
,name,reason,excpArr]; // 日常日誌儲存(可以將此功能單獨提煉到一個方法中) NSArray *dirArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *dirPath = dirArr[0]; NSString *logDir = [dirPath stringByAppendingString:@"/CrashLog"]; BOOL isExistLogDir = YES; NSFileManager
*fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath:logDir]) { isExistLogDir = [fileManager createDirectoryAtPath:logDir withIntermediateDirectories:YES attributes:nil error:nil]; } if (isExistLogDir) { // 此處可擴充套件 NSString *logPath = [logDir stringByAppendingString:@"/crashLog.txt"]; [excpCnt writeToFile:logPath atomically:YES encoding:NSUTF8StringEncoding error:nil]; } }