22

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

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

CGRect frame = view.frame;

我可以使用print framelldb 中的命令毫无问题地访问它。但是,当我尝试在 lldb 中再次访问框架时,我输入print view.frame并收到以下错误:

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

这没有意义,因为我可以通过键入并获得正确的结果来验证它view是一个UIView*实例并具有一个名为 frame 的有效属性:po view

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

这个特殊的lldb错误经常发生在我身上,我找不到这个错误的原因。有人在属性 'count' not found on object of 'NSMutableArray *' PO command in lldb中建议可以使用 gdb,(gdb) p view.frame但我得到了error: '(gdb)' is not a valid command.,我高度怀疑 gdb 命令会“工作吗?” 无论如何,在另一个调试器中。

对于这个随机发生的错误有什么建议或解决方法吗?

4

3 回答 3

57

使用 Objective-C 时,lldb 不支持用于消息发送的点表示法。使用括号表示法并将结果转换为 CGRect:

p (CGRect)[view frame]
于 2012-12-23T01:24:52.320 回答
3

以防万一上述方法不起作用(它不适合我,寻找变量单元格的框架,从 UITableViewCell 派生的类):强制使用额外的括号似乎有助于 lldb 的小脑筋:

p ((CGRect)[cell frame])

魔术前奏:

(CGRect) $5 = origin=(x=0, y=0) size=(width=320, height=44)
于 2013-12-01T21:36:42.840 回答
0

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

于 2018-06-29T19:15:45.620 回答