当我尝试使用以下代码将nil对象放入NSDictionary时出现异常:
NSString * object = [self someMethod]; // the method return nil
NSDictionary * dict = @{ @"key": object };
这是一个我知道的简单错误,我只是以它为例。应用程序在模拟器中崩溃,控制台中的错误消息如下:
2012-11-13 14:40:00.528 Ape[44456:11303] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[2]'
*** First throw call stack:
(0x208b012 0x1a68e7e 0x2051a95 0x207e4e9 0x93f72 0x939b4 0x8800f 0x85f4d 0x852a3 0x1ce853f 0x1cfa014 0x1ce9fd6 0x1cfa014 0x1cf18b7 0x1ced405 0x1cea768 0x2031af5 0x2030#
libc++abi.dylib: terminate called throwing an exception
我的问题是如何在控制台中找出call stack
消息并找出导致问题的代码行?
先谢谢。
答案 0 :(得分:4)
您需要添加异常断点。打开 Xcode - > Navigator - > 断点(快捷键Cmd + 6)。在左下角,有一个+号,单击它并选择“添加例外断点...”然后选择“完成”。
答案 1 :(得分:0)
通常会给你一个象征性的障碍,以确定异常的来源。其他替代方法是设置您自己的异常处理并使用backtrace
和朋友(manpage)提供符号堆栈跟踪,并在确定生产代码中出现崩溃的位置时,通常会删除符号,有atos
实用程序(manpage)。
答案 2 :(得分:0)
在控制台中,您可以输入“bt”进行回溯,您将看到最后一次通话。但对于某些错误,它不会显示,所以添加一个异常断点作为提到的graver
答案 3 :(得分:0)
打开xcode“隐藏或显示调试区域”
然后从该菜单中选择“仅显示控制台”按钮
现在当出现错误时,找到符号(lldb)并在其旁边输入 bt