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

Posted

技术标签:

【中文标题】lldb 错误:在类型的对象上找不到属性【英文标题】:lldb error: property not found on object of type 【发布时间】:2012-12-10 02:01:52 【问题描述】:

我正在尝试使用 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 并获得正确的结果,它有一个名为 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 命令会“工作吗?”无论如何,在另一个调试器中。

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

【问题讨论】:

已经尝试过:错误:没有已知的方法'-frame';将消息发送到方法的返回类型 打印 [(UIView*)view frame] 也不起作用 打印(CGRect)[视图框架] 有时我也会遇到这种情况。在这种情况下,我只是使用 NSLog() 或将其分配给我将使用 lldb 打印的临时对象/结构。 @RamyAlZuhouri 这是一种解决方法,但是在您调试并且需要某个变量的值并且您没有对其进行 nslogged 时,它不是很方便。 【参考方案1】:

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

p (CGRect)[view frame]

【讨论】:

(lldb) p [view frame] 错误:没有已知的方法'-frame';将消息发送到方法的返回类型 编辑后生效。为什么我应该明确地投射它?以及为什么它有时会发生的任何想法,否则,lldb 只是在没有任何强制转换的情况下与 po/print 完美配合? @canpoyrazoğlu 因为当 LLDB 查询运行时时,它不知道您要打印的非对象的类型,所以强制转换给了它一个承诺的类型。 @CodaFi 好的,现在我很好奇。为什么 LLDB 真正关心类型?为什么不直接运行代码看看是否有效? @ssdscott 的答案应该是公认的答案,如果没有外部括号,它就不起作用【参考方案2】:

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

【讨论】:

【参考方案3】:

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

p ((CGRect)[cell frame])

魔法前奏:

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

【讨论】:

这个答案应该是公认的答案,因为 lldb 仍然抱怨没有外括号。 你的答案中的“以上”短语可以改变上下文,请指向一个具体的答案。

以上是关于lldb 错误:在类型的对象上找不到属性的主要内容,如果未能解决你的问题,请参考以下文章

在“CBPeripheral *”类型的对象上找不到属性“uuid”

在“RKObjectManager”类型的对象上找不到属性“managedObjectStore”

UISlider 错误:在“__strong id”类型的对象上找不到属性“值”

在“UIDatePicker”类型的对象上找不到属性“preferredDatePickerStyle”

在 GLKView 类型的对象上找不到属性“层”

在“UITableViewCell”类型的对象上找不到属性