首页 文章

XCode不会在LLDB调用的方法中停止断点

提问于
浏览
3
  • XCode 7.2.1

  • iPad Retina iOS 9.2模拟器

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

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

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

我在模拟器中运行项目,并在断点处停止 in a different method than the one in question ,此时我想转到LLDB提示符并调用 po [self areaNbr] 并逐步执行 areaNbr .

请注意,因为这可能非常相关, I have NO code in the project itself that calls
-(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 回答

  • 5

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

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

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

    然后你会在你的断点处停下来 .

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

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

    (lldb) help expr
    

相关问题