Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
显示一个C++;LLDB类型摘要中的类成员 我有一个C++类,它有一个类成员,它是 static 成员。我希望使用自定义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; }_C++_Xcode_Lldb - Fatal编程技术网

显示一个C++;LLDB类型摘要中的类成员 我有一个C++类,它有一个类成员,它是 static 成员。我希望使用自定义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; }

显示一个C++;LLDB类型摘要中的类成员 我有一个C++类,它有一个类成员,它是 static 成员。我希望使用自定义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; },c++,xcode,lldb,C++,Xcode,Lldb,在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) typ

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

,根据,(lldb)目标变量显示文件中的全局和静态变量。也许这有帮助,很好的线索。这并不能完全解决我的问题,因为事实上,我的类是一个支持单元的
模板,每个
模板
实例化的静态成员(单位SI名称,如“m/s”)都不同。我将了解如何获取对象的完整类名。python摘要将获取一个SBValue,表示要摘要的值。SBValue有一个GetTypeName,但您可能希望使用GetType来获取类型,如果它是指针/引用,则获取指针对象类型,然后获取其名称。手工将这些字符从typename中去掉很容易出错。