h文件
//
// CatchCrash.h
// bcleaner
//
// Created by dt-mac on 2017/6/1.
// Copyright © 2017年 DT. All rights reserved.
//
#import <Foundation/Foundation.h>
CatchCrash : NSObject
void uncaughtExceptionHandler(NSException *exception);
m文件
//
// CatchCrash.m
// bcleaner
//
// Created by dt-mac on 2017/6/1.
// Copyright © 2017年 DT. All rights reserved.
//
#import "CatchCrash.h"
@implementation CatchCrash
//在AppDelegate中注册后,程序崩溃时会执行的方法
void uncaughtExceptionHandler(NSException *exception)
{
//获取系统当前时间,(注:用[NSDate date]直接获取的是格林尼治时间,有时差)
NSDateFormatter *formatter =[[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *crashTime = [formatter stringFromDate:[NSDate date]];
//异常的堆栈信息
NSArray *stackArray = [exception callStackSymbols];
//出现异常的原因
NSString *reason = [exception reason];
//异常名称
NSString *name = [exception name];
//拼接错误信息
NSString *exceptionInfo = [NSString stringWithFormat:@"crashTime: %@ Exception reason: %@\nException name: %@\nException stack:%@", crashTime, name, reason, stackArray];
//把错误信息保存到本地文件,设置errorLogPath路径下
//并且经试验,此方法写入本地文件有效。
NSString *errorLogPath = [NSString stringWithFormat:@"%@/Documents/error.log", NSHomeDirectory()];
NSError *error = nil;
BOOL isSuccess = [exceptionInfo writeToFile:errorLogPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
if (!isSuccess) {
DLog(@"将crash信息保存到本地失败: %@", error.userInfo);
}
}
@end
使用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
。。。
}