我有一个名为Values的自定义类,它是数组的包装器。对于类vFoo的给定对象Values,该对象包含类Foo的对象数组,var format -T vFoo命令返回以下结构:
(MyNameSpace::Values) vFoo = {
(void *) p = 0x0000000100204378
(size_t) n = 2
(MyNameSpace::ValueType) type = FOO
}其中vFoo.p是指向包含2个元素的array<Foo>的指针。我可以在lldb提示符中使用以下命令访问数组元素:
expression ((MyNameSpace::Foo*)vFoo.p)[0]回传
(MyNameSpace::Foo) $0 = "foo"根据我的总结提供者。
我想编写一个合成子提供程序,它返回如下内容:
(MyNameSpace::Values) vFoo = {
(MyNameSpace::Foo) vFoo.p[0] = "foo"
(MyNameSpace::Foo) vFoo.p[1] = "bar"
}不幸的是,我不知道该怎么做。我阅读了11 data数据格式化器页并尝试遵循页面末尾的结构。我也看过位字段和libcxx示例,但是我找不到解决方案的方法。任何帮助都将不胜感激!
事先非常感谢
发布于 2014-09-08 15:31:24
您需要获得Foo类型的内部表示。您可以使用SBModule使用self.valobj.GetFrame().GetModule().FindFirstType("Foo")获取此信息。像这样的东西会对周围的人起作用。
class Values_SynthProvider:
def __init__(self, valobj, dict):
self.valobj = valobj
self.num_elements = None
def update(self):
self.num_elements = self.valobj.GetChildMemberWithName('n').GetValueAsUnsigned(0)
def num_children(self):
return self.num_elements
def get_child_at_index(self,index):
# Here you could switch on the value of Values::type to get the right type name to search for
foo_type = self.valobj.GetFrame().GetModule().FindFirstType("Foo")
return self.valobj.GetChildMemberWithName('p').Cast(foo_type.GetPointerType()).GetChildAtIndex(index,0,True)
def get_child_index(self,name):
return int(name.lstrip('[').rstrip(']'))https://stackoverflow.com/questions/25725802
复制相似问题