2012-12-23 68 views
20

我正在尝试使用lldb调试我的iOS应用程序,并且在调试时出现了很奇怪的错误。lldb错误:在类型对象上找不到属性

我的断点前几行,我有:

CGRect frame = view.frame;

,我可以用在LLDB print frame命令没有问题访问。然而,当我尝试在LLDB再次访问框架,I型print view.frame并得到以下错误:

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

这是没有意义的,因为我可以验证viewUIView*实例并具有称为帧有效的属性通过键入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命令会“工作?”无论如何,在另一个调试器内。

任何有关此错误随机出现的建议或解决方法?

+0

打印[图幅] –

+0

已经尝试过:错误:没有已知的方法 '-frame';将该消息发送到方法的返回类型 –

+0

print [(UIView *)view frame] does not work要么 –

回答

50

lldb不支持消息发送的点符号。用括号标记,并把结果给的CGRect:

p (CGRect)[view frame] 
+0

(lldb)p [查看框架] 错误:没有已知方法'-frame';将编辑的消息发送到方法的返回类型 –

+0

。我应该明确地施展它的任何理由?以及有时为什么会出现这种想法,否则,lldb只是在没有任何演员的情况下与po/print完美地工作? –

+3

@canpoyrazoğlu因为当LLDB查询运行时时,它不知道要打印的非对象的类型,所以cast会给它一个承诺类型。 – CodaFi

3

万一上面不工作(它没有对我来说,寻找框架的,用于可变单元,从类派生的UITableViewCell):迫使额外的括号似乎帮助LLDB的小玩意大脑:

p ((CGRect)[cell frame]) 

似的魔幻:

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

这个答案应该是公认的答案,因为这仍然LLDB没有抱怨外括号。 – inix

相关问题