好的。所以我有这个非常奇怪的SIGABRT
我正在开发的一个复杂的 Objective-C iOS 程序上出现了错误,经过一天的跟踪,我找到了罪魁祸首。
假设我们有以下代码:
NSArray *a = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
NSLog(@"tada: %@", [a objectAtIndex:-1]);
为什么这会终止程序Program received signal: SIGABRT
并且调试器甚至没有指向我的代码(而是在某些汇编部分),而不是更好的“索引越界”和“嘿,这行代码这里是错误的”错误?
我以为我弄乱了项目配置,所以我在一个全新的项目上重现了这个:相同的结果。
有没有一种方法可以将 XCode 配置得更好,并以更容易理解的方式指示此类错误?
正如文档所说 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html:
如果索引超出数组末尾(即,如果索引大于
小于或等于 count 返回的值),则 NSRangeException 为
上调
当没有定义异常处理程序时,默认操作是...好吧...您可以看到默认行为是什么。
You can使用 @try/@catch 来捕获异常,但这并不是真正的 Objective-C 风格。你知道数组中有多少个元素;您实际上没有必要访问不存在的元素。
像这样的异常通常有堆栈跟踪,因此您可以返回到导致错误的代码行。 (如果 LLDB 和 GDB 工作不正常,可能值得在 LLDB 和 GDB 之间切换。LLDB 更快、更小,但并不完全可靠。(
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)