首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用lldb调试

使用lldb调试
EN

Stack Overflow用户
提问于 2021-07-02 07:23:40
回答 1查看 52关注 0票数 0

全,

考虑以下类结构:

基类->类公共Derived1 ->类公共Derived2。

也就是说,有一个基类。类Derived1是Base的直接子对象,而类Derived2是Derived2的直接子对象,但不是Base。

在LLDB中有没有办法查看类结构?

我试图在OSX上使用LLDB调试我的程序,但是很难看到变量的类树。

我试着去做:

代码语言:javascript
复制
> p (Derived1 *) this

但它没有帮助-它只是在输出中显示了相同的(Derived2)类及其地址。

谢谢。

编辑:

正在尝试

代码语言:javascript
复制
v *this

结果如下:

代码语言:javascript
复制
(lldb) v *this
error: the version command takes no arguments.
(lldb) 

EDIT2:

这是我得到的:

代码语言:javascript
复制
Igors-MacBook-Air:Debug igorkorot$ lldb
(lldb) version
lldb-902.0.79.7
  Swift-4.1
(lldb) 
EN

回答 1

Stack Overflow用户

发布于 2021-07-02 09:34:12

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

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

总的来说,这实际上是非常方便的。例如,如果你在一个方法的基础上,但this实际上是一个Derived2,你通常希望看到完整的对象,而不仅仅是基础部分。

您可以使用以下命令关闭动态类型解析:

代码语言:javascript
复制
(lldb) expr -d no-dynamic-values -- (Derived *) this

此外,如果你要求lldb显示一个对象而不是一个对象指针,lldb会显示它是按类层次结构组织的,基类嵌套在它们的父类中,每个子类的ivars嵌套在它们自己的类中。举个例子:

代码语言:javascript
复制
(lldb) v *this

我想让你看看你在找什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68217937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档