2011-11-25 37 views
6

有一个在我的应用程序,它具有以下(部分)堆栈跟踪显示了一个错误:上选择添加符号断点在Xcode

2011-11-25 01:55:59.760 Events2[6650:403] -[Event boolValue]: unrecognized selector sent to instance 0x7fb903928670 

要调试此我决定上添加符号断点 - [事件boolValue]推理当发送该选择器时,调试器将停止。

但是,没有任何反应。在设置断点之后,应用程序就会开始执行并产生相同的异常而不会暂停。

enter image description here

我使用LLDB调试器和Xcode 4.2

回答

7

在选择器上设置断点会导致lldb在执行该选择器时暂停,而不是在发送时。在你的情况下,没有选择器“ - [Event boolValue]”,因此这个断点永远不会被命中。

我将在“所有Objective-C异常”上设置异常断点。当“无法识别的选择器发送”异常被抛出并且您可以看到问题出现的位置时,这将会被触发。

2

它看起来对我来说,象征性的断点不正确的LLDB工作(:

如下我定义的断点在编写本文时,我正在运行最新版本的Xcode,4.3.3)。

我在addAnimation:forKey:在LLDB中设置了一个符号断点,它永远不会被命中。如果我将项目切换到GDB,则断点按预期工作。

-2

找到无法识别的选择器调用的最佳方法是创建此选择器(作为类别)并在其中放置一个断点。

3

我一直在寻找相同的答案(象征性的断点),并且此链接帮助: http://www.cocoabuilder.com/archive/cocoa/308967-symbolic-breakpoints.html#308970

你必须遵循这种模式(也给出在Xcode中断点编辑器的占位符):

- [name_of_the_class name_of_the_method:] 

比如我一直在寻找,看看谁没有设定我的左手栏项目,并覆盖我的设置,我用 -[UINavigationItem setLeftBarButtonItem:]

和它的工作。或者这一个

-[UINavigationController pushViewController:animated:]

2

我会设置一个断点符号带有此标志的-[NSObject doesNotRecognizeSelector:]enter image description here

,这将有助于我们捕捉到其中一个选择被调用防错对象的情况。