前言
每次线上都会有些崩溃记录在友盟,但是这些崩溃日志并不好查找崩溃的原因,我就在想有没有好一点的方法.
错误的异想天开的做法
当时想着是是根据OC语言的消息转发
原理,将那三个消息转发的方法利用运行时进行注入自己的代码.简单的做法就是将NSObject
的分类利用runtime
进行方法交换.
问题所在
这个方法经过试验,比如测试越界等等确实能走到自己写的方法里,但是正常的消息转发也会被记录,这并不是一件好事!
正确而简单的做法
查阅了些文章,发现iOS是提供了这样的函数回调的,写起来很简单,但是发现和第三方缺陷收集平台收集的信息差不多.具体做法如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
NSSetUncaughtExceptionHandler(&my_uncaught_exception_handler);
return YES;
}
static void my_uncaught_exception_handler (NSException *exception) {
//这里可以取到 NSException 信息
NSLog(@"***********************************************");
NSLog(@"%@",exception);
NSLog(@"%@",exception.callStackReturnAddresses);
NSLog(@"%@",exception.callStackSymbols);
NSLog(@"***********************************************");
}
在AppDelegate
里注册自己的函数,在这里你可以本机记录崩溃,看自己的需求了
网友评论