程序在设备上运行时发生闪退,调试的时候发现未捕捉的异常,但是这些异常信息很有限,不能有效定位代码段,需要为app加入未捕捉异常:
摘自:http://www.cnblogs.com/dqshll/archive/2012/08/29/2661933.html
在AppDelegate.m中添加函数:
void uncaughtExceptionHandler(NSException*exception){ NSLog(@"CRASH: %@", exception); NSLog(@"Stack Trace: %@",[exception callStackSymbols]); // Internal error reporting }
这里会打印出异常时的call stack, 也是发生crash时候, 最有价值的信息.
然后在程序入口处向下面这样调用它:
-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions { NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); // Normal launch stuff }
NSSetUncaughtExceptionHandler 就是告诉系统, 当发生异常时, 使用这个函数作为回调.
这样之后, 发生crash时, 就可以看到打印出的call stack, 就可以很方便的定位到发生crash的那行代码.