如何捕获系统外异常

有时应用崩溃,而日志中的输出信息太少,无法定位问题,这是最头疼的事情,尤其很累的时侯,已经想不起来刚才改过什么了,这就叫做无耐。

工欲善其事,必先利其器,下面的方法可以给多些信息,让你看到堆栈执行顺序,在哪里崩溃的,也就能大概给个思路,确定问题的症结。

在 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);
在 AppDelegate.m 类实现的应用启动方法中加入如下语句,为系统设置异常回调函数为上面的声明,详细说明见 “iOS Foundation 框架概述文档:常量、数据类型、框架、函数、发布声明”:

?
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值