iOS在Release环境下运行,遇到Exception导致的Crash时,可以进行捕获。
首先编写异常处理逻辑:
void UncaughtExceptionHandler(NSException *exception) {
// 异常的堆栈信息
NSArray *stackArray = [exception callStackSymbols];
// 出现异常的原因
NSString *reason = [exception reason];
// 异常名称
NSString *name = [exception name];
NSString *exceptionInfo = [NSString stringWithFormat:@"Exception reason:%@\nException name:%@\nException stack:%@",name, reason, stackArray];
NSLog(@"%@", exceptionInfo);
// 把异常崩溃信息保存到本地文件,下次启动时,后台上传到服务端
[exceptionInfo writeToFile:[NSString stringWithFormat:@"%@/Documents/error.log",NSHomeDirectory()] atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
其次,在AppDelegate中设置:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
return YES;
}
制造一个异常:
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *arr = [NSArray new];
arr[-1];
}
可以看到运行后,在Doc目录下生成了log文件: