如何阅读Xcode控制台输出?

时间:2011-05-11 17:55:17

标签: iphone objective-c xcode console

作为Xcode新手的Java和PHP开发人员,我在处理内存错误方面遇到了麻烦。我有一本书中的示例程序,它在启动时因“程序接收信号'SIGABRT'而崩溃。”我不知道如何处理下面的控制台输出。我意识到它是某种堆栈跟踪,但左边的名称只是应用程序的名称,而不是类或文件。我不知道“主+ 121”或“开始+ 53”意味着什么或在哪里看。任何指导都将不胜感激。

2011-05-11 10:43:23.071 FlowerInfoNavigator[22537:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSCFDictionary objectForKey:]: method sent to an uninitialized mutable dictionary object'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00dc25a9 __exceptionPreprocess + 185
    1   libobjc.A.dylib                     0x00f16313 objc_exception_throw + 44
    2   CoreFoundation                      0x00dbf542 -[__NSPlaceholderDictionary objectForKey:] + 194
    3   FlowerInfoNavigator                 0x0000289a -[RootViewController tableView:didSelectRowAtIndexPath:] + 330
    4   UIKit                               0x0008bb68 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1140
    5   UIKit                               0x00081b05 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 219
    6   Foundation                          0x0079b79e __NSFireDelayedPerform + 441
    7   CoreFoundation                      0x00da38c3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
    8   CoreFoundation                      0x00da4e74 __CFRunLoopDoTimer + 1220
    9   CoreFoundation                      0x00d012c9 __CFRunLoopRun + 1817
    10  CoreFoundation                      0x00d00840 CFRunLoopRunSpecific + 208
    11  CoreFoundation                      0x00d00761 CFRunLoopRunInMode + 97
    12  GraphicsServices                    0x00ffa1c4 GSEventRunModal + 217
    13  GraphicsServices                    0x00ffa289 GSEventRun + 115
    14  UIKit                               0x00022c93 UIApplicationMain + 1160
    15  FlowerInfoNavigator                 0x00001b99 main + 121
    16  FlowerInfoNavigator                 0x00001b15 start + 53
)
terminate called after throwing an instance of 'NSException'
(gdb)

3 个答案:

答案 0 :(得分:4)

右边是调用堆栈的方法。我通常只是寻找来自我的一个方法的任何东西(虽然这并不总是有效)然后它会给你问题源于的方法调用。在“FlowerInfoNavigator”的电话号码3的跟踪中,方法tableView:didSelectRowAtIndexPath:被调用,并且在那里的某处导致了崩溃。您应该能够使用调试器和断点来从中缩小范围。祝你好运。

编辑:当我看到你的错误信息:在它的顶部,它给你错误。您试图从尚未初始化的NSDictionary中检索对象,从上面开始,它出现在您的didSelectRowAtIndexPath方法

答案 1 :(得分:0)

控制台不是你唯一看的地方。看看你的调试器。那边通常有一条粗体线。如果点击它,它会告诉你崩溃的确切位置。

您似乎没有初始化NSDictionary

答案 2 :(得分:0)

崩溃是由于nsdictionary尚未初始化以及如何在崩溃期间进行搜索,首先查看控制台,以便了解导致崩溃或异常的原因并获取应用程序崩溃的位置,您可以查看调试器在调试器中,应用程序崩溃时,粒子线将以粗体显示。

除了你还可以使用NSZombieEnabled(BOOL)来获取导致应用程序崩溃的原因。更多关于NSZombieEnabled的信息可以在这里找到http://developer.apple.com/library/ios/#documentation/Xcode/Conceptual/iphone_development/130-Debugging_Applications/debugging_applications.html

注意:这里确保在处理申请提交到苹果商店时将NSZombieEnabled设置为NO。

希望这有帮助。