3

当我尝试使用以下代码将 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控制台中的消息并找出导致问题的代码行?

提前致谢。

4

4 回答 4

4

您需要添加一个异常断点。打开Xcode ->导航器->断点(快捷键 Cmd+6)。在左下角,有一个 + 号,单击它并选择“添加异常断点...”,然后选择“完成”。

于 2012-11-13T07:33:41.743 回答
0

通常会给您一个符号 stracktrace 以找出异常的来源。其他替代方法是设置您自己的异常处理并使用backtrace和朋友(手册页)提供符号堆栈跟踪,当涉及到确定生产代码中发生崩溃的位置时,通常会剥离符号,有atos实用程序(手册页)。

于 2012-11-13T07:44:05.333 回答
0

在控制台中,您可以键入“bt”进行回溯,您将看到最后一次调用。但是对于某些错误,它不会显示,所以添加一个异常断点,因为 Grager 提到

于 2012-11-13T07:48:00.293 回答
0

打开xcode“隐藏或显示调试区域”

然后从该菜单中选择“仅显示控制台”按钮

现在当错误出现时找到符号(lldb) 并在它旁边输入bt

于 2012-11-13T08:36:43.653 回答