Xcode异常解释

Posted

技术标签:

【中文标题】Xcode异常解释【英文标题】:Xcode exception interpretation 【发布时间】:2012-08-31 06:19:45 【问题描述】:

谁能告诉我如何处理这个异常?调试器位于异常断点处,如您所见,关于异常的可操作信息似乎为零。它发生在哪里?很确定它不在我的代码中,但我不知道如何继续......

非常感谢您的帮助。

编辑 1: 这是控制台内容

* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSArrayM objectAtIndex:]:空数组的索引 0 超出范围'

*** 第一次抛出调用堆栈: (0x30ce188f 0x3627e259 0x30c2a9db 0x8d029 0x915c5 0x35723c59 0x35725ee7 0x30cb42ad 0x30c374a5 0x30c3736d 0x36ffb78de409 0x3290721) 终止称为抛出异常

编辑 2: 这是回溯

线程 #1:tid = 0x1c03, 0x3627e238 libobjc.A.dylib`objc_exception_throw,停止原因 = 断点 1.1

帧 #0:0x3627e238 libobjc.A.dylib`objc_exception_throw

第 1 帧:0x30c2a9da CoreFoundation`-[__NSArrayM objectAtIndex:] + 270

编辑 3(解决方案): 这是使用 main() 方法的回溯

2012-08-31 10:27:21.489 [820:707] 未捕获的异常 *** -[__NSArrayM objectAtIndex:]:空数组的索引 0 超出范围

2012-08-31 10:27:32.908 [820:707] 堆栈跟踪:(

0   CoreFoundation                      0x30ce18a7 __exceptionPreprocess + 186
1   libobjc.A.dylib                     0x3627e259 objc_exception_throw + 32
2   CoreFoundation                      0x30c2a9db -[__NSArrayM objectAtIndex:] + 270
3   <>                                  0x00050ed1 __55-[SFSummaryCard retrieveAndDisplayFirstImageForString:]_block_invoke_0 + 148
4   <>                                  0x0005546d __block_global_1 + 40
5   libdispatch.dylib                   0x35723c59 _dispatch_call_block_and_release + 12
6   libdispatch.dylib                   0x35725ee7 _dispatch_main_queue_callback_4CF$VARIANT$mp + 194
7   CoreFoundation                      0x30cb42ad __CFRunLoopRun + 1268
8   CoreFoundation                      0x30c374a5 CFRunLoopRunSpecific + 300
9   CoreFoundation                      0x30c3736d CFRunLoopRunInMode + 104
10  GraphicsServices                    0x36ffb439 GSEventRunModal + 136
11  UIKit                               0x32917cd5 UIApplicationMain + 1080
12  <>                                  0x00036c01 main + 220
13  <>                                  0x00036b20 start + 40

)

关键元素是:retrieveAndDisplayFirstImageForString()

【问题讨论】:

控制台也没有打印任何东西? 您是否启用了 Xcode 以中断抛出的异常?以下是如何启用它:ijoshsmith.com/2011/11/28/debugging-exceptions-in-xcode-4-2 *** 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array”*** 第一次抛出调用堆栈: (0x30CE188F 0x3627E259 0x30c2a9db 0x8d029 0x915c5 0x35723c59 0x35725 0x35723c59 0x35725 0x35723c59 0x3572507 0x30cb42aad 0x30c3736d 0x30c3736d 0x36ffb439 0x32917cd5 0x36ffb439 0x32917cd5 0x72e4d 0x72de8)终止称为抛出异常(LLDB) span> @kernix : 这是它在异常断点处中断的地方 向我们展示您如何启动阵列及其定义。 【参考方案1】:

Xcode 4/ios 5 存在一个问题,有时您在模拟器中无法获得异常回溯,这是由于模拟器的伪操作系统中存在明显的错误。解决方案是在您的main 中添加显式回溯,类似于

@try 
    retVal = UIApplicationMain...

@catch (NSException* exception) 
    NSLog(@"Uncaught exception %@", exception);
    NSLog(@"Stack trace: %@", [exception callStackSymbols]);

【讨论】:

需要一个 * on 异常(NSException 异常)。所以不会让我进行一个字符的编辑。将很快报告这种回溯方法的结果。 我已使用这种方法将回溯添加到 OP。我们有一个赢家! @Jimmy_m -- 谢谢 -- 我不得不将代码从 Mac 屏幕重新输入到 Windows 屏幕,所以不会出现错误。 np。感谢你的回答。这很棒,将来可能会帮助我解决其他问题。【参考方案2】:

您可以设置异常断点print backtrace in console。

例子:

-(void)backtraceTest

    NSArray *array = [NSArray arrayWithObjects:@"1", @"2", nil];
    id obj = [array objectAtIndex:3]; // out of bounds
    NSLog(@"%@", obj);

给出这个回溯:

你可以看到在 HelloWorldLayer.m 文件的第 34 行调用了 NSArray 的 objectAtIndex 方法,然后发生了异常。

【讨论】:

除了确认异常在 CoreFoundation 中之外,它并没有比 OP 中的屏幕截图提供更多信息:* thread #1: tid = 0x1c03, 0x3627e238 libobjc.A.dylibobjc_exception_throw, stop reason = breakpoint 1.1 frame #0: 0x3627e238 libobjc.A.dylibobjc_exception_throw帧 #1: 0x30c2a9da CoreFoundation`-[__NSArrayM objectAtIndex:] + 270 它对第 2 帧说了什么? 没有。查看 OP 中的编辑 - 这是使用此方法的完整回溯。 对我真的很有帮助。谢谢。 @Kreiri【参考方案3】:

这是相关的:

http://ijoshsmith.com/2011/11/28/debugging-exceptions-in-xcode-4-2/

您可以添加显示回溯的“异常断点”;事件处理程序,您可以将其移至所有项目中出现的“用户断点”。

希望我早点学会这个技巧。

【讨论】:

【参考方案4】:

我能够通过解决方法解决:

    关闭所有打开的应用程序 重新启动 Finder 运行 sudo find / -name ".DS_Store" -exec rm \; 这会删除计算机上的所有 .DS_Store 旧文件 启动 finder 并将默认视图设置为“列表视图”,如下所示:http://macs.about.com/od/usingyourmac/ss/Setting-Finder-Views-For-Folders-And-Su b-Folders_2.htm 重新运行有问题的应用程序和文件选择器工作

【讨论】:

以上是关于Xcode异常解释的主要内容,如果未能解决你的问题,请参考以下文章

解释 Xcode 时间分析器

xcode 程序配置 python 解释器嵌入

新使用 XCode Instruments 解释 iPhone 开发的内存警告,需要指导

苹果资讯丨苹果终于对Xcode挂马程序做出解释

关于IllegalMonitorStateException异常的解释

无法解释数字格式中的异常