捕獲異常崩潰日誌(iOS)
阿新 • • 發佈:2019-02-11
在進行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];
}
}