0

无用的堆栈

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

非常感谢您的帮助。

编辑 1: 这是控制台内容

* 由于未捕获的异常“NSRangeException”而终止应用程序,原因:“* -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array”

***首先抛出呼叫堆栈:( 0x30CE188F 0x3627E259 0x30c2a9db 0x8d029 0x915c5 0x35723c59 0x35725 0x35723c59 0x35725 0x35723c59 0x3572507 0x30cb42ad 0x30c374a5 0x30c3736d 0x36ffb439 0x32917cd5 0x36ffb4d 0x32917cd5 0x72e4d 0x72de8)终止称为抛出异常

编辑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()

4

4 回答 4

8

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

@try {
    retVal = UIApplicationMain...
}
@catch (NSException* exception) {
    NSLog(@"Uncaught exception %@", exception);
    NSLog(@"Stack trace: %@", [exception callStackSymbols]);
}
于 2012-08-31T16:58:50.030 回答
2

您可以在控制台中进行异常断点打印回溯

例子:

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

给出这个回溯:

回溯示例

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

于 2012-08-31T07:49:54.650 回答
1

这是相关的:

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

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

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

于 2013-02-14T14:40:15.217 回答
0

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

  1. 关闭所有打开的应用程序
  2. 重新启动 Finder
  3. 运行 sudo find / -name ".DS_Store" -exec rm {} \;
  4. 这将删除计算机上的所有 .DS_Store 旧文件
  5. 启动查找器并将默认视图设置为“列表视图”,如下所示:http : //macs.about.com/od/usingyourmac/ss/Setting-Finder-Views-For-Folders-And-Sub-Folders_2.htm
  6. 重新运行有问题的应用程序和文件选择器工作
于 2013-12-21T05:17:11.427 回答