查找与XCode调试器中的错误对应的行

时间:2014-12-17 16:07:15

标签: objective-c xcode

当XCode输出类似'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]:etc.的错误时,如何找到具有该objectAtIndex代码的代码行?

2 个答案:

答案 0 :(得分:11)

创建一个新的异常断点。它通常会显示首次抛出异常的位置。转到左侧的Breakpoints选项卡:

enter image description here

enter image description here

答案 1 :(得分:0)

查看下面的行,
你应该对你和系统运行的方法有一个回溯 在那里,你应该找到它所在的方法的名称。

我刚刚接受了一个现有的项目,并添加了类似的崩溃和目的来说明这一点。

我的方法 -

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];  
    self.contacts = [NSMutableArray arrayWithArray: [ARContact loadContacts]];  
    NSLog(@"%@", self.contacts[100]); // Index 100 is outside of the array scope  
    ....  
}  

崩溃的控制台日志(在Xcode的底部)

*** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 100 beyond bounds for empty array'
*** First throw call stack:
(
    0   CoreFoundation                      0x0000000101a87495 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x00000001007ec99e objc_exception_throw + 43
    2   CoreFoundation                      0x0000000101a2d745 -[__NSArrayM objectAtIndex:] + 213
    3   PhoneBookApp                        0x0000000100001f95 -[ViewController viewWillAppear:] + 261
    4   UIKit                               0x0000000100b1adb5 -[UIViewController _setViewAppearState:isAnimating:] + 422
    5   UIKit                               0x0000000100b38c4d -[UINavigationController _startTransition:fromViewController:toViewController:] + 707  

在这里,您可以看到事物发生的相反顺序(意味着0是最新的运行,1就在它之前,等等)。

如果您查看数字3和4,您会在崩溃前看到,NSArray的{​​{1}}方法(第3行), 这个方法来自objectAtIndex:(第4行)。