在Xcode中的选择器上添加符号断点

时间:2011-11-25 02:09:22

标签: xcode lldb

我的应用中存在一个错误,显示以下(部分)堆栈跟踪:

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

为了调试这个,我决定在 - [Event boolValue]上添加一个符号断点,推断当发送选择器时,调试器会停止。

然而,没有任何反应。在设置断点之后,应用程序只需士兵并在不停止的情况下生成相同的异常。

我已经按如下方式定义了断点:

enter image description here

我正在使用带Xcode 4.2的LLDB调试器

5 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:6)

我正在寻找相同的答案(符号断点),这个链接有帮助: 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 :(得分:4)

我会使用此符号-[NSObject doesNotRecognizeSelector:] enter image description here

设置符号断点

这将帮助我们捕获针对错误对象调用选择器的情况。

答案 3 :(得分:2)

在我看来,符号断点在LLDB中无效(我在撰写本文时运行的是最新发布的Xcode版本,4.3.3)。

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

答案 4 :(得分:-1)

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