首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >11&合成提供者:跟随指针

11&合成提供者:跟随指针
EN

Stack Overflow用户
提问于 2014-09-08 13:47:59
回答 1查看 376关注 0票数 1

我有一个名为Values的自定义类,它是数组的包装器。对于类vFoo的给定对象Values,该对象包含类Foo的对象数组,var format -T vFoo命令返回以下结构:

代码语言:javascript
复制
(MyNameSpace::Values) vFoo = {
  (void *) p = 0x0000000100204378
  (size_t) n = 2
  (MyNameSpace::ValueType) type = FOO
}

其中vFoo.p是指向包含2个元素的array<Foo>的指针。我可以在lldb提示符中使用以下命令访问数组元素:

代码语言:javascript
复制
expression ((MyNameSpace::Foo*)vFoo.p)[0]

回传

代码语言:javascript
复制
(MyNameSpace::Foo) $0 = "foo"

根据我的总结提供者。

我想编写一个合成子提供程序,它返回如下内容:

代码语言:javascript
复制
(MyNameSpace::Values) vFoo = {
     (MyNameSpace::Foo) vFoo.p[0] = "foo"
     (MyNameSpace::Foo) vFoo.p[1] = "bar"
}

不幸的是,我不知道该怎么做。我阅读了11 data数据格式化器页并尝试遵循页面末尾的结构。我也看过位字段和libcxx示例,但是我找不到解决方案的方法。任何帮助都将不胜感激!

事先非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-08 15:31:24

您需要获得Foo类型的内部表示。您可以使用SBModule使用self.valobj.GetFrame().GetModule().FindFirstType("Foo")获取此信息。像这样的东西会对周围的人起作用。

代码语言:javascript
复制
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(']'))
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25725802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档