【问题标题】:Why does LLDB does not acknowledge complete selector name as a breakpoint?为什么 LLDB 不承认完整的选择器名称作为断点?
【发布时间】:2015-01-12 22:22:25
【问题描述】:

我有一个在 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” ?

谢谢!

-玛莲娜

【问题讨论】:

    标签: selector breakpoints lldb


    【解决方案1】:

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

    仔细想想,这实际上是有道理的,因为用户在调用方法时必须提供选择器的“placeViews:”部分,但“screenSize”与他们如何调用它无关。此外,在 @interface 中使用 screenSize 并在 @implementation 中使用完全不同的名称也不是错误。所以它真的不应该是运行时为消息所使用的名称的一部分。

    您可以验证这一点,例如在终端中运行它

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

    没有提到 screenSize。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 2018-04-30
      • 1970-01-01
      • 1970-01-01
      • 2016-04-03
      • 2014-11-12
      相关资源
      最近更新 更多