我有一个带有static
成员的C ++类,这意味着一个类成员。我想使用自定义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
似乎无法获取类成员。
有没有办法在自定义LLDB类型摘要中显示类成员值,是通过Python还是直接?
答案 0 :(得分:2)
Don是对的,lldb认为类的静态成员是静态变量,而不是类对象的子类。
摘要的简单字符串格式没有#34; Global Variable Named"的语法,因此您无法以这种方式添加它。所以你必须编写一个基于Python的摘要。
如果你这样做,应该直接进入静态类。您几乎就在那里,您只需要将变量作为静态变量获取而不是作为对象的子项。您的Python摘要将在对象的SBValue中传递,您可以使用SBValue.GetTarget()
来获取拥有该值的目标,然后您可以使用SBTarget.FindFirstGlobalVariable
来查找类static的值。在您的情况下,变量的名称将为A::classValue
。