首页 > 解决方案 > c ++ gdb如何使用未使用的运算符*打印*shared_ptr

问题描述

这是我正在尝试测试的简单代码。

int main()
{
    shared_ptr<int> pa = make_shared<int>(3);
    return 0;
}

我正在使用 gdb 在 VScode 中进行调试,如下所示。(断点在return 0

-exec p *pa
Could not find operator*.

我认为这可能是因为 shared_ptr 的函数 operator* 没有定义。因此,我尝试在 ;*pa之前调用 main 中的 * return 0,结果证明是可行的。

-exec p *pa
$1 = (std::__shared_ptr_access<int, (__gnu_cxx::_Lock_policy)2, false, false>::element_type &) @0x24354c31930: 3

我想知道如果我没有使用过*,我可以在调试期间使用它吗?经过一番搜索,我通过在开头实例化模板来尝试以下代码。

template class shared_ptr<int>;
int main()
{
    shared_ptr<int> pa = make_shared<int>(3);
    return 0;
}

但是它仍然不起作用,我猜它可能是由链接器引起的?我不太确定编译和链接。那么我如何在调试期间使用 * 而不使用它 main,如果有人能解释它会非常好,谢谢!

我将 x86_64-w64-mingw32 与 gcc 版本 10.2.0、GNU gdb (GDB) 10.1 和 g++ 使用 args 编译"-o", "-g", "-Wall", "-Wextra", "-static-libgcc", "-fexec-charset=GBK", "-std=c++11", "-D__USE_MINGW_ANSI_STDIO=1"

标签: c++gdbmingw

解决方案


推荐阅读