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

Pno*_*ong 8 c++ gdb tr1 shared-ptr

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

(gdb) p sharedPtr->variableOfTarget
Run Code Online (Sandbox Code Playgroud)

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

$1 = std::tr1::shared_ptr (count 2) 0x13c2060
Run Code Online (Sandbox Code Playgroud)

使用普通指针,我可以完成p *ptr并获取所有数据或p ptr->variable仅获取一个变量.

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

boy*_*011 24

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

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

我最终去/ usr/include /找到shared_ptr的源代码来查看私有成员.

结果证明是这样的

ptr._M_ptr

这个对我有用.源代码适用于所有人.

  • Nop,不一样,`ptr-> get()`是尝试从shared_ptr指向的任何东西调用`get`函数,而`*ptr.get()`是解引用该指针.`.`运算符在这里有首选.`*ptr.get()`与`*(ptr.get())`相同. (3认同)

vac*_*ing 8

先回答:

p *frame._M_ptr # frame is the shared_ptr's name
Run Code Online (Sandbox Code Playgroud)

我尝试过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
Run Code Online (Sandbox Code Playgroud)

然后我试图获取这个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   
Run Code Online (Sandbox Code Playgroud)

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

(gdb) p *frame._M_ptr 
$5 = {
...
}
Run Code Online (Sandbox Code Playgroud)

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


Ray*_*nda 7

试试吧

(gdb) p (*sharedPtr.get())
Run Code Online (Sandbox Code Playgroud)

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