如何在模拟器中找出`call stack`的含义?

时间:2012-11-13 07:25:39

标签: iphone ios xcode debugging ios-simulator

当我尝试使用以下代码将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 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

通常会给你一个象征性的障碍,以确定异常的来源。其他替代方法是设置您自己的异常处理并使用backtrace和朋友(manpage)提供符号堆栈跟踪,并在确定生产代码中出现崩溃的位置时,通常会删除符号,有atos实用程序(manpage)。

答案 2 :(得分:0)

在控制台中,您可以输入“bt”进行回溯,您将看到最后一次通话。但对于某些错误,它不会显示,所以添加一个异常断点作为提到的graver

答案 3 :(得分:0)

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

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

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