Xcode异常解释

时间:2012-08-31 06:19:46

标签: objective-c xcode debugging

useless stack

有谁能告诉我如何解决这个例外?调试器位于异常断点处,正如您所看到的,似乎没有关于异常的可操作信息。它发生在哪里?很确定它不在我的代码中,但我对如何继续...感到茫然...

非常感谢您的帮助。

编辑1: 这是控制台内容

*由于未捕获的异常'NSRangeException'而终止应用,原因:'* - [__ NSArrayM objectAtIndex:]:索引0超出空数组的边界'

***第一次调用堆栈:(0x30ce188f 0x3627e259 0x30c2a9db 0x8d029 0x915c5 0x35723c59 0x35725ee7 0x30cb42ad 0x30c374a5 0x30c3736d 0x36ffb439 0x32917cd5 0x72e4d 0x72de8) 终止调用抛出异常

编辑2: 这是回溯

线程#1:tid = 0x1c03,0x3627e238 libobjc.A.dylib`objc_exception_throw,stop reason = breakpoint 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 个答案:

答案 0 :(得分:8)

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

@try {
    retVal = UIApplicationMain...
}
@catch (NSException* exception) {
    NSLog(@"Uncaught exception %@", exception);
    NSLog(@"Stack trace: %@", [exception callStackSymbols]);
}

答案 1 :(得分:2)

您可以创建例外断点print backtrace in console

示例:

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

给出了这个回溯:

backtrace example

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

答案 2 :(得分:1)

这是相关的:

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

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

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

答案 3 :(得分: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-Su b-Folders_2.htm
  6. 重新运行有问题的应用程序和文件选择器工作