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.dylib
objc_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 Instruments 解释 iPhone 开发的内存警告,需要指导