前言
每次線上都會(huì)有些崩潰記錄在友盟,但是這些崩潰日志并不好查找崩潰的原因,我就在想有沒(méi)有好一點(diǎn)的方法.
錯(cuò)誤的異想天開(kāi)的做法
當(dāng)時(shí)想著是是根據(jù)OC語(yǔ)言的消息轉(zhuǎn)發(fā)
原理,將那三個(gè)消息轉(zhuǎn)發(fā)的方法利用運(yùn)行時(shí)進(jìn)行注入自己的代碼.簡(jiǎn)單的做法就是將NSObject
的分類利用runtime
進(jìn)行方法交換.
問(wèn)題所在
這個(gè)方法經(jīng)過(guò)試驗(yàn),比如測(cè)試越界等等確實(shí)能走到自己寫的方法里,但是正常的消息轉(zhuǎn)發(fā)也會(huì)被記錄,這并不是一件好事!
正確而簡(jiǎn)單的做法
查閱了些文章,發(fā)現(xiàn)iOS是提供了這樣的函數(shù)回調(diào)的,寫起來(lái)很簡(jiǎn)單,但是發(fā)現(xiàn)和第三方缺陷收集平臺(tái)收集的信息差不多.具體做法如下:
- (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
里注冊(cè)自己的函數(shù),在這里你可以本機(jī)記錄崩潰,看自己的需求了