gpt4 book ai didi

objective-c - NSArray:为什么发送 SIGABRT 而不是 'index out of bounds' 类型的错误?

转载 作者:行者123 更新时间:2023-12-04 18:23:52 25 4
gpt4 key购买 nike

好的。所以我有这个非常奇怪的SIGABRT我正在开发的一个复杂的 Objective-C iOS 程序出错,经过一天的跟踪,我找到了罪魁祸首。

假设我们有以下代码:

NSArray *a = [NSArray arrayWithObjects:@"a", @"b", @"c", nil];
NSLog(@"tada: %@", [a objectAtIndex:-1]);

为什么这会用 Program received signal: SIGABRT 终止程序?并且调试器甚至没有指向我的代码(而是在某个程序集部分),而不是更好的“索引越界”和“嘿,这行代码是错误的”错误?

我以为我搞砸了项目配置,所以我在一个全新的项目上复制了这个:同样的结果。

有没有办法将 XCode 配置得更好,并以更易于理解的方式指示此类错误?

最佳答案

As the documentation says :

If index is beyond the end of the array (that is, if index is greater than or equal to the value returned by count), an NSRangeException is raised



当没有定义异常处理程序时,默认操作是……嗯……你可以看到默认行为是什么。

您可以使用@try/@catch 来捕获异常,但这并不是真正的Objective-C-ish。你知道数组中有多少元素;您没有真正需要访问不存在的元素。

像这样的异常通常有一个堆栈跟踪,所以你可以回到导致错误的代码行。 (如果 LLDB 和 GDB 工作不正常,可能值得在 LLDB 和 GDB 之间切换。LLDB 更快更小,但并不完全可靠。(

关于objective-c - NSArray:为什么发送 SIGABRT 而不是 'index out of bounds' 类型的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10141196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com