2016-03-08 179 views
3
称为
  • 的XCode 7.2.1
  • iPad的视网膜的iOS 9.2模拟器

我有几个断点在一个特定的类在XCode项目设置。 我在下面讨论的一切都发生在这个类文件中。的XCode不会停止在断点方法从LLDB

我在-(int16_t)areaNbr上设置了断点,方法是单击装订线,并且不设置任何条件或任何内容。我通过LLDB提示符运行breakpoint list,证实它们存在于LLDB中。

项目方案设置为构建调试,而不是发布。

我运行在模拟器的项目,并在一个比问题,当时我想去的LLDB提示,并呼吁po [self areaNbr]并通过areaNbr步骤不同的方法在断点处停止。

请注意,因为这可能是非常相关的,我在调用
-(int16_t)areaNbr

目前该项目本身没有代码,我能得到这个停在我的断点上-(int16_t)areaNbr,如果我加入一些代码调用该方法的项目。
例如,如果我添加类似NSLog(@"... %d", [self areaNbr])

我知道这个问题已经无关编译消失只是因为没有调用它的方法,因为如果这是真的,那么我对po [self areaNbr]呼叫不能随地吐痰将结果输出到调试器窗口,如下图所示。所以这个方法正在被编译,并且当然被调试器识别为执行的目的......仅仅是为了步进目的。

仅供参考,[self area]正在恢复 “Area01”

enter image description here

拨打LLDB breakpoint list返回以下

enter image description here

+1

如果你想想看够长,你就会明白为什么从本身执行代码时LLDB不接受断点。 – Avi

+0

您不应该使用'po'来打印'uint16_t'。 “po”是“** p ** rint ** o **对象”。使用'p'作为原始类型。 –

+1

尝试'表达式-i false - [self areaNbr]'。祝你好运。 – Avi

回答

4

默认情况下,LLDB不会在断点处停止手叫码。大多数人使用expr & expr -O --po来打印值&对象,并且如果他们停在他们为其他目的设置的断点处而感到恼火。

然而,很容易控制这种行为,只需使用:

(lldb) expr -i 0 -- [self areaNbr] 

然后你会停在你的断点。

在这个例子中,我忽略了-O是打印对象的部分,因为如果你只是想调用这个方法,你可能不会在计算表达式后对结果调用description

您可以通过执行看到表达式求所有选项:

(lldb) help expr 
+0

真正起作用的全是鳄梨酱'莫莱莫尔......辉煌。 –