我的应用中存在一个错误,显示以下(部分)堆栈跟踪:
2011-11-25 01:55:59.760 Events2[6650:403] -[Event boolValue]: unrecognized selector sent to instance 0x7fb903928670
为了调试这个,我决定在 - [Event boolValue]上添加一个符号断点,推断当发送选择器时,调试器会停止。
然而,没有任何反应。在设置断点之后,应用程序只需士兵并在不停止的情况下生成相同的异常。
我已经按如下方式定义了断点:
我正在使用带Xcode 4.2的LLDB调试器
答案 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:]
这将帮助我们捕获针对错误对象调用选择器的情况。
答案 3 :(得分:2)
在我看来,符号断点在LLDB中无效(我在撰写本文时运行的是最新发布的Xcode版本,4.3.3)。
我在addAnimation设置了一个符号断点:forKey:在LLDB中,它永远不会被击中。如果我将项目切换到GDB,断点将按预期工作。
答案 4 :(得分:-1)
找到无法识别的选择器调用的最佳方法是创建此选择器(作为类别)并在其中放置一个断点。