jezzmemo/JJException

这闪退异常无拦截,回调没执行

wscqs opened this issue · 6 comments

wscqs commented

如下:
[NSMutableArray arrayWithArray:@{}];

[NSDictionary setValue:nil forKey:@"aa"];

你初始化的代码是不是有问题?贴出来看看

wscqs commented
    [JJException configExceptionCategory: JJExceptionGuardArrayContainer | JJExceptionGuardNSNotificationCenter | JJExceptionGuardNSStringContainer | JJExceptionGuardDictionaryContainer | JJExceptionGuardUnrecognizedSelector];//除了JJExceptionGuardNSTimer | JJExceptionGuardKVOCrash
    [JJException startGuardException];
    [JJException registerExceptionHandle:self];
[JJException registerExceptionHandle:self];

这是弱引用,注意宿主的生命周期,测试异常的代码在setup之后

wscqs commented

你就测试下。 [NSMutableArray arrayWithArray:nil]; 这样闪退会回调。 我给的代码:[NSMutableArray arrayWithArray:@{}];直接闪退,不会回调handleCrashException

[NSMutableArray arrayWithArray:@{}];

API的设计是数组类型的,你强行给字典类型,所以是系统抛出来的异常,我们并没有做类型检查

[NSDictionary setValue:nil forKey:@"aa"];

这个调用直接走到了NSKeyValueCoding的方法了,而且是实例化方法,报了forUndefinedKey的错误,我们并没有hook object forUndefinedKey这个方法,所以直接运行异常了

wscqs commented

[NSMutableArray arrayWithArray:@{}]; 字典是服务端返回的,所以我才发现这个坑的,我意思这种不可控的异常最好能尽量处理。谢谢