11

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

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

为了调试它,我决定在 -[Event boolValue] 上添加一个符号断点,原因是当发送该选择器时,调试器将停止。

然而,什么也没有发生。设置断点后,应用程序只是士兵并生成相同的异常而不会停止。

我已将断点定义如下:

在此处输入图像描述

我在 Xcode 4.2 中使用 LLDB 调试器

4

5 回答 5

11

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

我会在“所有 Objective-C 异常”上设置一个异常断点。当抛出“无法识别的选择器已发送”异常时,这将被击中,您可以看到问题发生在哪里。

于 2012-07-02T13:26:02.887 回答
9

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

于 2013-03-25T19:57:15.820 回答
6

我会用这个符号设置一个符号断点-[NSObject doesNotRecognizeSelector:] 在此处输入图像描述

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

于 2014-10-23T11:37:14.433 回答
3

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

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

于 2012-06-21T15:41:01.663 回答
-2

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

于 2013-01-24T10:31:37.567 回答