我正在尝试使用lldb调试我的iOS应用程序,但我在调试时遇到了非常奇怪的错误。
在我的断点之前的几行,我得到了:
CGRect frame = view.frame;
我可以在lldb中使用print frame
命令来访问它。但是,当我尝试在lldb中再次访问帧时,我键入print view.frame
并得到以下错误:
error: property 'frame' not found on object of type 'UIView *'
这没有任何意义,因为我可以通过键入po view
并获得正确的结果来验证view
是一个UIView*
实例,并且具有一个名为frame的有效属性:
(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命令可以“工作?”在另一个调试器中。
对于这个随机出现的bug,有什么建议或解决办法吗?
发布于 2012-12-23 09:24:52
使用Objective-C时,lldb不支持用于消息发送的点符号。使用方括号表示法并将结果转换为CGRect:
p (CGRect)[view frame]
发布于 2013-12-02 05:36:43
以防上面的方法不起作用(我在寻找变量单元格的框架,从UITableViewCell派生的类):强制使用额外的圆括号似乎对lldb的小大脑有帮助:
p ((CGRect)[cell frame])
presto magico:
(CGRect) $5 = origin=(x=0, y=0) size=(width=320, height=44)
发布于 2018-06-30 03:15:46
我不得不在Xcode > Product > Scheme > Edit Scheme > Run > Diagnostics中禁用(取消选中)线程消毒器。启用线程消毒器后,我无法通过LLDB访问许多NSView属性(例如边界、帧)。
https://stackoverflow.com/questions/14007942
复制相似问题