gpt4 book ai didi

c++ - 在 LLDB 类型摘要中显示 C++ 类成员

转载 作者:搜寻专家 更新时间:2023-10-31 02:19:16 26 4
gpt4 key购买 nike

我有一个带有 static 的 C++ 类member,意思是类成员。我想使用自定义 LLDB 类型摘要显示该类成员的值,以便使用 Xcode 进行调试。以一个非常简单的类进行演示:

class A
{
public:
int memberValue;
static int classValue;
};
int A::classValue;

int main()
{
A a;
a.memberValue = 8;
a.classValue = 42;
return 0;
}

return 上放置断点声明,运行示例,我在 LLDB 命令窗口中得到以下结果:

(lldb) print a
(A) $0 = (memberValue = 8)
(lldb) print a.memberValue
(int) $1 = 8
(lldb) print a.classValue
(int) $2 = 42
(lldb) type summary add -s "${var.memberValue}" A
(lldb) print a
(A) $3 = 8
(lldb) type summary add -s "${var.classValue}" A
(lldb) print a
(A) $4 = error: summary string parsing error
(lldb)

语法 ${var.classValue}不适用于类型摘要中的类成员,因为它适用于常规成员,尽管 LLDB 能够显示带有 print 的值。命令。

我尝试使用 Python 摘要提供程序但没有成功:GetChildMemberWithName似乎也无法获取类成员。

是否有任何方法可以通过 Python 或直接在自定义 LLDB 类型摘要中显示类成员值?

最佳答案

Don 是对的,lldb 将类的静态成员视为静态变量,而不是类对象的子对象。

摘要的简单字符串格式没有“全局变量命名”的语法,因此您无法以这种方式添加它。因此,您将不得不编写基于 Python 的摘要。

如果这样做,应该可以直接进入静态类。你几乎就在那里,你只需要将变量作为静态变量而不是作为对象的子变量来获取。您的 Python 摘要在对象的 SBValue 中传递,您可以使用 SBValue.GetTarget() 获取拥有该值的目标,然后您可以使用 SBTarget.FindFirstGlobalVariable 找到静态类的值。在您的例子中,变量的名称将是 A::classValue

关于c++ - 在 LLDB 类型摘要中显示 C++ 类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33669119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com