访问 GDB 中的向量项

Der*_*會功夫 3 c++ gdb vector stdvector

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

struct Foo{
    int data;
    vector<Foo*> children;
}
Run Code Online (Sandbox Code Playgroud)

要打印出数据值,我可以简单地执行以下操作:(设为bar指向 a 的指针Foo

print bar->data
Run Code Online (Sandbox Code Playgroud)

这很好用。不过我还想关注children另一个Foo。我试过:

print bar->children[0]->data
Run Code Online (Sandbox Code Playgroud)

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

小智 5

使用 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()用于限制指针的大小。

参考:如何在 GDB 中打印 C++ 向量的元素?

补充:

还有另一种不太优雅但更通用的方法:

print bar->children[0]

你可能会得到这样的结果:

(__gnu_cxx::__alloc_traits<std::allocator<Foo*> >::value_type &) @0x603118: 0x603090

因此您可以使用上面给出的指针访问它: print ((Foo)*0x603090).data