XCode不会在从LLDB

时间:2016-03-08 07:12:48

标签: ios objective-c xcode lldb

  • XCode 7.2.1
  • iPad Retina iOS 9.2模拟器

我在XCode项目的特定类中设置了几个断点。 我在下面讨论的所有内容都发生在这个类文件中。

我通过点击装订线在-(int16_t)areaNbr上设置了断点,并且没有设置条件或任何内容。我确认,就LLDB而言,它们存在于LLDB提示符中运行breakpoint list

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

我在模拟器中运行项目,并使用与有问题的方法 不同的方法停在 的断点处,此时我想转到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 个答案:

答案 0 :(得分:5)

默认情况下,lldb不会在手动调用的代码中的断点处停止。大多数人使用expr& expr -O --po打印值&如果他们在为其他目的设定的断点处停下来,他们会感到恼火。

但是,很容易控制此行为,只需使用:

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

然后你会在断点处停下来。

在这个例子中,我省略了-O这是对象打印部分,因为如果你只是想调用这个方法,你可能不关心在结果之后调用description表达式被评估。

您可以通过执行以下操作查看表达式评估的所有选项:

(lldb) help expr