我有一个非常特殊的问题。
最近,我向我的 iOS 项目(arm64)添加了 64 位支持,从那时起,我开始收到内部代码段未捕获的异常@try...@catch
(我使用 Crashlytics 进行崩溃报告)。我设法在应用程序中的任何位置使用以下代码行重现问题(我将它们写在里面)init
我的视图控制器之一):
@try {
NSMutableDictionary *m = [[NSMutableDictionary alloc] init];
NSString *s;
m[s] = @"poop";
} @catch (NSException *e) {
NSLog(@"POOP");
}
异常被捕获UncaughtExceptionHandler
而不是@catch
条款。我很困惑什么会导致这种情况。控制台中的输出:
2015-02-22 19:19:53.525 [391:30650] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: key cannot be nil'
*** First throw call stack:
(0x18823a59c 0x1989400e4 0x1881251f8 0x10011e2f4 0x10011e068 0x10010e480 0x10010db78 0x10010d944 0x1000a8050 0x100075d88 0x100075160 0x100142044 0x100141f6c 0x18c9ecaa0 0x18caa1fb4 0x18caa1eb0 0x18caa134c 0x18caa0ff8 0x18caa0d18 0x18caa0c98 0x18c9e9648 0x18c341994 0x18c33c564 0x18c33c408 0x18c33bc08 0x18c33b98c 0x18cc76dbc 0x18cc77c68 0x18cc75dec 0x1904b162c 0x1881f2a28 0x1881f1b30 0x1881efd30 0x18811d0a4 0x18ca573c8 0x18ca523c0 0x1000747d8 0x198faea08)
libc++abi.dylib: terminating with uncaught exception of type NSException
我尝试删除我拥有的自定义异常处理程序并禁用 Crashlytics,但仍然没有成功。
一旦我删除arm64
from ARCHS
and VALID_ARCHS
代码有效并且异常被按预期捕获。
任何信息将不胜感激!
小更新 - 我们的 XCTests 也开始不捕获异常,到目前为止,该行为仅发生在物理 64 位手机上。
经过长时间的 git 二分操作后,罪魁祸首是以下链接器标志
-no_compact_unwind
我使用了 BlocksKit v2.2.0,尽管它停止使用 libffi,但它仍然具有该标志(最新版本的 BlocksKit 删除了该不需要的标志)。当我删除链接器标志 64 位后@try...@catch
块再次开始工作。
我仍然不完全理解为什么会发生这种行为,但如果我发现任何有趣的事情,我将进一步挖掘并更新此线程。
phew
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)