繁体   English   中英

使用 lldb 进行调试

[英]Debugging with lldb

全部,

考虑以下类结构:

class Base -> class public Derived1 -> class public 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) 

编辑2:

这就是我得到的:

Igors-MacBook-Air:Debug igorkorot$ lldb
(lldb) version
lldb-902.0.79.7
  Swift-4.1
(lldb) 

默认情况下,lldb 使用其完整的动态类型显示由表达式评估产生的对象。 这是作为“值打印机”的一部分完成的,它在计算表达式后格式化结果。

您表达式的结果是一个对象指针,其静态类型为 Derived1(因为您对其进行了转换),但其 vtable 指针指向 Derived2 vtable,表明它的完整动态类型是 Derived2,这就是 lldb 打印它的方式。

一般来说,这实际上非常方便。 例如,如果您在 Base 的方法中,而this实际上是 Derived2,您通常希望看到完整的对象,而不仅仅是 Base 部分。

您可以使用以下方法关闭动态类型解析:

(lldb) expr -d no-dynamic-values -- (Derived *) this

此外,如果您要求 lldb 显示一个对象而不是对象指针,lldb 将显示它按类层次结构组织,基类嵌套在其父类中,每个子类的 ivars 嵌套在其所属类中。 所以例如:

(lldb) v *this

我会想告诉你你在找什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM