有时应用崩溃,而日志中的输出信息太少,无法定位问题,这是最头疼的事情,尤其很累的时侯,已经想不起来刚才改过什么了,这就叫做无耐。
工欲善其事,必先利其器,下面的方法可以给多些信息,让你看到堆栈执行顺序,在哪里崩溃的,也就能大概给个思路,确定问题的症结。
在 AppDelegate.m 类实现之前加入:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
void
UncaughtExceptionHandler(NSException *exception) {
// 获取异常相关信息
NSArray *callStackSymbols = [exception callStackSymbols];
NSString *callStackSymbolStr = [callStackSymbols componentsJoinedByString:@
];
NSString *reason = [exception reason];
NSString *name = [exception name];
// 获取系统当前时间
NSDate * date = [NSDate date];
NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init ];
[dateFormatter setDateFormat:
@yyyy
年MM月dd日 HH小时mm分ss秒];
NSString * dateStr = [dateFormatter stringFromDate:date];
NSLog(@系统当前时间为:%@
,dateStr);
NSLog(@异常名称:%@
,name);
NSLog(@异常原因:%@
,reason);
NSLog(@堆栈标志:%@
,callStackSymbolStr);
|
1
2
3
4
5
6
|
@implementation
AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
|
上面的方法只能捕获NSException类型的崩溃
更完整的方法请参考:
http://blog.csdn.net/zsomsom/article/details/9214219