如何在GDB中访问std :: tr1 :: shared_ptr的目标

时间:2014-07-23 17:55:14

标签: c++ gdb shared-ptr tr1

如何在GDB中访问std :: tr1 :: shared_ptr的目标。这不起作用:

(gdb) p sharedPtr->variableOfTarget

如果我尝试使用指针对象本身(p sharedPtr),我会得到这样的结果:

$1 = std::tr1::shared_ptr (count 2) 0x13c2060

使用普通指针,我可以p *ptr获取所有数据,或只为一个变量获取p ptr->variable

我在Centos 6.5,GCC 4.4.7-4.el6和GDB 7.2-64.el6_5.2。

3 个答案:

答案 0 :(得分:17)

ptr-> get()并不总是有效。

当我尝试ptr-> get()时,gdb抱怨:无法解析方法***:get()到任何重载的实例

我最终转到/ usr / include /查找shared_ptr的源代码以查看私有成员。

原来是

ptr._M_ptr

它对我有用。源代码适用于所有人。

答案 1 :(得分:6)

尝试

(gdb) p (*sharedPtr.get())

该函数返回指向智能指针所拥有的对象的指针。

答案 2 :(得分:0)

我尝试了p (*frame.get()),但没有成功(frame是我的shared_ptr名称)

(gdb) p frame
$4 = std::shared_ptr (count 2, weak 0) 0x2ea3080
(gdb) p (*frame.get())
Cannot evaluate function -- may be inlined

然后我试图获取shared_ptr中的内容,然后我发现了

(gdb) p frame.
_M_get_deleter  __shared_ptr    operator*       reset           unique          ~shared_ptr     
_M_ptr          get             operator->      shared_ptr      use_count       
_M_refcount     operator bool   operator=       swap            ~__shared_ptr   

我使用了_M_ptr字段,它有效。

(gdb) p *frame._M_ptr 
$5 = {
...
}

我使用了std :: shared_ptr和gdb 7.6。