【发布时间】:2016-06-22 00:48:38
【问题描述】:
- XCode 7.2.1
- iPad 视网膜 iOS 9.2 模拟器
我在 XCode 项目的特定类中设置了几个断点。 我在下面讨论的所有内容都发生在这个类文件中。
我通过单击装订线在-(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”
在 LLDB 中调用 breakpoint list 会返回以下内容
【问题讨论】:
-
如果你想得够久,你就会明白为什么 lldb 在从自身执行代码时不遵守断点。
-
您不应该使用
po来打印uint16_t。 “po”是“print object”。对原始类型使用p。 -
试试
expression -i false -- [self areaNbr]。祝你好运。 -
我用附加信息对帖子进行了相当多的修改。是的@JoshCaswell,你说对了 po 是对象,但是,你会注意到
po实际上是有效的(如上图所示)。我的问题不在于po,而在于调用该方法不会触发断点这一事实。我用po调用它,它实际上是在吐出正确的结果,它只是不会让我一步一步地完成这个方法。
标签: ios objective-c xcode lldb