如何在LLDB中找到无法识别的选择器的发件人?

时间:2012-11-18 23:55:07

标签: ios xcode lldb

我收到一个“无法识别的选择器”错误让我感到困惑。

我知道我可以在LLDB中“指出”指针以了解接收器。但有没有办法推断出哪个对象正在发送此消息?

谢谢!

2 个答案:

答案 0 :(得分:0)

调试器中的命令bt将向您显示一个回溯(stacktrace),它应该为您提供在该输出中某处启动消息的类。

答案 1 :(得分:0)

如果你处理多个线程,Backtrace并不总是有帮助 - 你最终会在主线程上找到异常处理程序的回溯,这不一定是导致错误的那个。

但是,既然您知道特定类的特定选择器不存在,您可以通过使用类别将选择器添加到类中来作弊,然后在其上粘贴断点。

例如,对于此错误:

-[__NSCFDictionary isEqualToString:]: unrecognized selector sent to instance 0x10004fb0

我们知道有些东西试图用“isEqualToString”调用“NSDictionary”。因此,在您喜欢的任何文件的末尾添加此项,在任何其他“@implementation”块之外添加:

@implementation NSDictionary(debug)
- (BOOL)isEqualToString:(NSString*)theString {
    return FALSE;
}
@end

坚持使用断点,重新运行代码,您将获得真正的堆栈跟踪。一旦发现错误,请不要忘记删除类别!