在GDB中访问矢量项

时间:2015-04-12 08:16:47

标签: c++ vector gdb stdvector

例如,我在模板化类中有这样的结构:

struct Foo{
    int data;
    vector<Foo*> children;
}

要打印出数据值,我可以这样做:(让bar成为Foo的指针)

print bar->data

这很好用。不过,我还希望children跟随另一个Foo。我试过了:

print bar->children[0]->data

但它不起作用。我应该如何访问向量中的项目并在print中使用它?

2 个答案:

答案 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的帮助下,显式实例化该向量可以解决问题。