我正在尝试使用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命令会“起作用吗?”反正在另一个调试器里面。
此错误的任何建议或解决方法是随机发生的吗?
答案 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属性(例如,边界,框架)。