如何在GDB中访问std::tr1::shared_ptr的target
How to access target of std::tr1::shared_ptr in GDB
如何访问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。
相关文章:
- 引用 std::shared:ptr 以避免引用计数
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- 无法使用 libtool 将 -shared 参数传递给 g++
- 如何修复以下错误"no match for call to '(std::tr1::shared_ptr<_iobuf*>) (FILE*&)'"
- 链接 boost 库时"Error while loading shared libraries"引发的,除了我无法使用 root 访问权限来修复它
- 解决方法:'can not be used when making a shared object; recompile with -fPIC'使用Cmake。使用普通的 g++ 工作
- gcc -fPIC vs. -shared
- 在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi
- TR1提供的所有东西现在都可以在C++14中使用并且易于使用吗
- Mac C++ 编译器找不到 <TR1/unordered_map>
- "directory containing symbolic versions of my app's shared libraries"的位置(ndk-stack)
- std :: tr1 :: shared_ptr throw bad_alloc,也是一个好主意
- 对 TR1 使用 boost 时提升数学特殊函数编译错误
- std::tr1::函数和它接受的模板值
- Qt自定义插件无法加载 - "Shared Library Not Found"
- TR1::绑定和通过引用传递,这种行为真的是预期的吗?
- 用TR1 :: Shared_ptr类型实现std ::相等
- C++, TR1, Regex and Boost
- c value_type对于std :: tr1不起作用:std :: map中的元组
- QSharedPointer VS std::tr1::shared_ptr VS boost::tr1::shared