lldb错误:在类型的对象上找不到属性

时间:2012-12-23 01:22:53

标签: objective-c ios6 xcode4.5 lldb

我正在尝试使用lldb调试我的iOS应用程序,我在调试时遇到了非常奇怪的错误。

在断点前几行,我得到了:

CGRect frame = view.frame;

我可以访问lldb中的print frame命令没有任何问题。但是,当我尝试在lldb中再次访问该帧时,我键入print view.frame并收到以下错误:

error: property 'frame' not found on object of type 'UIView *'

这没有意义,因为我可以通过键入view来验证UIView*po view实例并且具有称为框架的有效属性并获得正确的结果:

(UIView *) $4 = 0x1e199bf0 <MyAppCustomView: 0x1e199bf0; frame = (3398 3396; 204 208); layer = <CALayer: 0x1e199ce0>>

这个特殊的lldb错误发生在我身上很多,我找不到这个错误的原因。有人在Property 'count' not found on object of type 'NSMutableArray *' PO command in lldb建议可以使用gdb作为(gdb) p view.frame,但我得到error: '(gdb)' is not a valid command.并且我高度怀疑gdb命令会“起作用吗?”反正在另一个调试器里面。

此错误的任何建议或解决方法是随机发生的吗?

3 个答案:

答案 0 :(得分:55)

lldb不支持邮件发送的点表示法。使用括号表示法并将结果转换为CGRect:

p (CGRect)[view frame]

答案 1 :(得分:3)

以防上述情况不起作用(它不适用于我,寻找变量单元格的框架,派生自UITableViewCell的类):强制额外的括号似乎有助于lldb的小小脑:

p ((CGRect)[cell frame])

presto magico:

(CGRect) $5 = origin=(x=0, y=0) size=(width=320, height=44)

答案 2 :(得分:0)

我不得不在Xcode> Product> Scheme> Edit Scheme> Run> Diagnostics中禁用(取消选中)Thread Sanitizer。启用Thread Sanitizer后,我无法通过LLDB访问许多NSView属性(例如,边界,框架)。