全,
考虑以下类结构:
基类->类公共Derived1 ->类公共Derived2。
也就是说,有一个基类。类Derived1是Base的直接子对象,而类Derived2是Derived2的直接子对象,但不是Base。
在LLDB中有没有办法查看类结构?
我试图在OSX上使用LLDB调试我的程序,但是很难看到变量的类树。
我试着去做:
> p (Derived1 *) this但它没有帮助-它只是在输出中显示了相同的(Derived2)类及其地址。
谢谢。
编辑:
正在尝试
v *this结果如下:
(lldb) v *this
error: the version command takes no arguments.
(lldb) EDIT2:
这是我得到的:
Igors-MacBook-Air:Debug igorkorot$ lldb
(lldb) version
lldb-902.0.79.7
Swift-4.1
(lldb) 发布于 2021-07-02 09:34:12
默认情况下,lldb使用其完整的动态类型显示表达式求值产生的对象。这是作为“值打印机”的一部分完成的,“值打印机”在表达式求值后格式化结果。
表达式的结果是一个对象指针,它的静态类型是Derived1 (因为您强制转换它),但是它的vtable指针指向Derived2 vtable,这表明它的完整动态类型是Derived2,这就是lldb打印它的方式。
总的来说,这实际上是非常方便的。例如,如果你在一个方法的基础上,但this实际上是一个Derived2,你通常希望看到完整的对象,而不仅仅是基础部分。
您可以使用以下命令关闭动态类型解析:
(lldb) expr -d no-dynamic-values -- (Derived *) this此外,如果你要求lldb显示一个对象而不是一个对象指针,lldb会显示它是按类层次结构组织的,基类嵌套在它们的父类中,每个子类的ivars嵌套在它们自己的类中。举个例子:
(lldb) v *this我想让你看看你在找什么。
https://stackoverflow.com/questions/68217937
复制相似问题