在 LLDB 类型摘要中显示 C++ class 成员
Display a C++ class member in LLDB type summary
我有一个带有 static
成员的 C++ class,意思是 class 成员。我想使用自定义 LLDB 类型摘要显示 class 成员的值,以简化 Xcode 的调试。拿个很简单的class做示范:
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命令window中得到以下结果:
(lldb) print a
(A) [=12=] = (memberValue = 8)
(lldb) print a.memberValue
(int) = 8
(lldb) print a.classValue
(int) = 42
(lldb) type summary add -s "${var.memberValue}" A
(lldb) print a
(A) = 8
(lldb) type summary add -s "${var.classValue}" A
(lldb) print a
(A) = error: summary string parsing error
(lldb)
语法 ${var.classValue}
不适用于类型摘要中的 class 成员,就像它对常规成员一样,尽管 LLDB 能够使用 print
命令显示该值。
我尝试使用 Python 摘要提供程序但没有成功:GetChildMemberWithName
似乎也无法获取 class 成员。
有没有办法在自定义 LLDB 类型摘要中显示 class 成员值,通过 Python 或直接显示?
Don 是对的,lldb 认为 class 的静态成员是静态变量,而不是 class 对象的子对象。
摘要的简单字符串格式没有 "Global Variable Named " 的语法,因此您将无法以这种方式添加它。所以你将不得不写一个基于 Python 的总结。
如果这样做,应该可以直接进入 class 静态。你几乎就在那里,你只需要将变量作为静态变量而不是作为对象的子变量来获取。您的 Python 摘要在对象的 SBValue 中传递,您可以使用 SBValue.GetTarget()
获取拥有该值的目标,然后您可以使用 SBTarget.FindFirstGlobalVariable
查找 class静态。在您的情况下,变量的名称将是 A::classValue
.
我有一个带有 static
成员的 C++ class,意思是 class 成员。我想使用自定义 LLDB 类型摘要显示 class 成员的值,以简化 Xcode 的调试。拿个很简单的class做示范:
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命令window中得到以下结果:
(lldb) print a
(A) [=12=] = (memberValue = 8)
(lldb) print a.memberValue
(int) = 8
(lldb) print a.classValue
(int) = 42
(lldb) type summary add -s "${var.memberValue}" A
(lldb) print a
(A) = 8
(lldb) type summary add -s "${var.classValue}" A
(lldb) print a
(A) = error: summary string parsing error
(lldb)
语法 ${var.classValue}
不适用于类型摘要中的 class 成员,就像它对常规成员一样,尽管 LLDB 能够使用 print
命令显示该值。
我尝试使用 Python 摘要提供程序但没有成功:GetChildMemberWithName
似乎也无法获取 class 成员。
有没有办法在自定义 LLDB 类型摘要中显示 class 成员值,通过 Python 或直接显示?
Don 是对的,lldb 认为 class 的静态成员是静态变量,而不是 class 对象的子对象。
摘要的简单字符串格式没有 "Global Variable Named " 的语法,因此您将无法以这种方式添加它。所以你将不得不写一个基于 Python 的总结。
如果这样做,应该可以直接进入 class 静态。你几乎就在那里,你只需要将变量作为静态变量而不是作为对象的子变量来获取。您的 Python 摘要在对象的 SBValue 中传递,您可以使用 SBValue.GetTarget()
获取拥有该值的目标,然后您可以使用 SBTarget.FindFirstGlobalVariable
查找 class静态。在您的情况下,变量的名称将是 A::classValue
.