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

How to access target of std::tr1::shared_ptr in GDB

本文关键字:shared tr1 ptr target std GDB 访问      更新时间:2023-10-16

如何访问GDB中std::tr1::shared_ptr的target ?这行不通:

(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_5.2.

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

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

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

结果是

ptr._M_ptr

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

Try with

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

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

先回答:

p *frame._M_ptr # frame is the shared_ptr's name

我尝试了p (*frame.get()),但它没有工作(框架是我的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。