用gdb检查boost shared_ptr

m.d*_*han 19 c++ boost gdb shared-ptr

以下是我的源代码:

#include <iostream>
#include <boost/shared_ptr.hpp>

class MyClass
{
    public:
        MyClass()
        {
            i=10;
        }
    private:
        int i;
};


int main(int argc, const char *argv[])
{
    boost::shared_ptr <MyClass> obj(new MyClass());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我想检查gdb中的obj,并查看成员变量i的值.

这是我用普通打印得到的:

29          boost::shared_ptr <MyClass> obj(new MyClass());
(gdb) n
30          return 0;
(gdb) p obj
$1 = {px = 0x602010, pn = {pi_ = 0x602030}}
Run Code Online (Sandbox Code Playgroud)

我尝试了此链接中提到的提示,但无法正常工作.

(gdb) call (obj.get())->print()
Cannot evaluate function -- may be inlined
Run Code Online (Sandbox Code Playgroud)

还有其他方法吗?gdb版本是7.0.1.

m.d*_*han 30

得到它了.!

(gdb) set print pretty
(gdb) p obj
$5 = {
  px = 0x602010,
  pn = {
    pi_ = 0x602030
  }
}
(gdb) p obj.px
$6 = (MyClass *) 0x602010



(gdb) p *(obj.px)
$7 = {
  i = 10
}
Run Code Online (Sandbox Code Playgroud)

  • 这是我一整天都看到的最有用的东西!万分感谢.我没有意识到我可以通过这种方式取消引用指针.:-) (3认同)
  • 这对我不起作用."p obj"给出`$ 2 = std :: shared_ptr(count 2,weak 1)0x639268`,"p obj.px"给出`没有名为px`的成员或方法.我也试过"p*obj",但没有快乐:`找不到运算符*.` (3认同)