如何在gdb python脚本中获取static_cast之后的值的强制转换类型

时间:2018-03-08 14:13:56

标签: python c++ gdb static-cast

我想写一个gdb python脚本来传递一个类。 但我无法在c ++ static_cast之后得到类型。 original type

class {
...
        private:
            __iter_pointer& __begin_node() _NOEXCEPT {return __begin_node_;}
            __iter_pointer                                     __begin_node_;
...
}

在其他地方,将__begin_node强制转换为__node_pointer,然后在__node_pointer中使用数据成员__value_。

 __node_pointer __cache = static_cast<__node_pointer>(__begin_node());
 __cache->__value_ = _VSTD::move(__t.remove(__t.begin())->__value_);

python代码是:

 def children(self):
        begin = self.val['__tree_']['__begin_node_']
        nodetype = begin.type
        size = self.val['__tree_']['__pair3_']['__first_']
        fmt = lambda count,value : ('[%s]' % value['first'], value['second'])
        return CxxRbTreeIterator(nodetype, begin, size, fmt)

听到我们得到一个节点类型,它是&#39; __ begin_node&#39;的类型,即。 &#39; __ iter_pointer&#39;,然后我们将它转​​发给CxxRbTreeIterator。
.................

在CxxRbTreeIterator中,

def __next__(self):
    count = self.count
    self.count = self.count + 1
    if count == self.size:
        raise StopIteration
    value_ptr = self.begin.cast(self.nodetype)
    value = value_ptr.dereference()['__value_']
    self.begin = self.get_next_node(self.begin)
    return self.fmt(count, value)

这里,value_ptr得到__iter_pointer类型,然后值想得到它的&#39; member __value_,但__value_是__node_pointer的成员而不是__iter_pointer。所以python出错了,没有成员__value _。

0 个答案:

没有答案