为什么LLDB不会将完整的选择器名称确认为断点?

时间:2014-11-15 17:11:45

标签: selector breakpoints lldb

我在objective C中声明了一个函数名:

- (void)placeViews:(CGSize)screenSize;

在我的viewDidLoad中我调用了这个函数,我想在调用它时设置一个断点:

[self placeViews:size]

所以在LLDB中我输入以下断点命令:

breakpoint set --selector placeViews:screenSize

但是LLDB无法解决断点

但是,当我只使用“placeViews:”作为选择器时,它会找到选择器并添加断点。 我没有得到的是为什么它在我使用“placeViews:”时找到选择器,但是当我使用整个方法名称“placeViews:screenSize”时它找不到它。 这是为什么? 那么当我有多个方法(例如“placeViews:screenSize:oneMoreThing”)并且我只想在此方法上设置断点时会发生什么,LLDB如何区分“placeViews:screenSize”和“placeViews:screenSize:oneMoreThing” ?

谢谢你!

-Malena

1 个答案:

答案 0 :(得分:0)

placeViews:screenSize不是选择器名称,选择器只是“placeViews:”。选择器名称不包括传递给该选择器指示的消息的变量名称(在您的情况下为screenSize。)

如果您考虑它,这实际上是有意义的,因为用户在调用方法时必须提供选择器的“placeViews:”部分,但“screenSize”没有他们如何调用它的部分。此外,在@interface中使用screenSize并在@implementation中使用完全不同的名称也不是错误。所以它实际上不应该是运行时为消息提出的名称的一部分。

您可以验证这一点,例如在终端

中运行它

$ otool -o | grep placeViews               名称0x100000f56 placeViews:

没有提到screenSize。