例如,我在模板化类中有这样的结构:
struct Foo{
int data;
vector<Foo*> children;
}
要打印出数据值,我可以这样做:(让bar
成为Foo
的指针)
print bar->data
这很好用。不过,我还希望children
跟随另一个Foo
。我试过了:
print bar->children[0]->data
但它不起作用。我应该如何访问向量中的项目并在print
中使用它?
答案 0 :(得分:3)
使用GDB 7.9和g ++ 4.9.2,打印bar->children[0]->data
时效果很好。
但是,这里也是访问这些元素的间接方法:
print (*(bar->children._M_impl._M_start)@bar->children.size())[0]->data
其中VECTOR._M_impl._M_start
是VECTOR的内部数组,POINTER@VECTOR.size()
用于限制指针的大小。
参考:How do I print the elements of a C++ vector in GDB?
<强>补强>
还有另一种不那么优雅但更通用的方式:
print bar->children[0]
你可能得到这样的东西:
(__gnu_cxx::__alloc_traits<std::allocator<Foo*> >::value_type &) @0x603118: 0x603090
所以你可以使用上面给出的指针访问它:
print ((Foo)*0x603090).data
答案 1 :(得分:0)
在this answer的帮助下,显式实例化该向量可以解决问题。