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

时间:2015-11-12 10:19:27

标签: c++ xcode lldb

我有一个带有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还是直接?

1 个答案:

答案 0 :(得分:2)

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

摘要的简单字符串格式没有#34; Global Variable Named"的语法,因此您无法以这种方式添加它。所以你必须编写一个基于Python的摘要。

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