You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在GDB中禁用特定美化打印机?以C++11 std::unique_ptr为例

如何在GDB中禁用特定的美化打印机(比如std::unique_ptr)

我之前调试的时候也碰到过这个需求——自带的美化打印机有时候会把std::unique_ptr这类容器包装得太“友好”,反而看不到底层的内存结构。GDB的帮助文档确实没给太直白的例子,下面是我亲测有效的步骤,分临时和永久两种场景:

第一步:先找到目标打印机的信息

首先得确认你要禁用的打印机到底叫什么、在哪个组里。在GDB命令行输入:

info pretty-printers

这个命令会列出所有已注册的美化打印机,比如std::unique_ptr的打印机通常在libstdc++-v3这个分组下面,输出大概长这样:

global pretty-printers:
libstdc++-v3:
...
std::unique_ptr
...

记下来这个分组名(libstdc++-v3)和打印机名(std::unique_ptr),或者也可以看前面的编号(比如假设它是第3项)。

临时禁用(仅当前GDB会话生效)

有两种简单的方式:

  • 用编号禁用:如果刚才查到unique_ptr的打印机编号是3,直接输入:
    disable pretty-printer 3
    
  • 用名字精准禁用:更稳妥的方式是指定分组和名字,避免误禁用其他打印机:
    disable pretty-printer global libstdc++-v3 std::unique_ptr
    
    执行完之后,再打印unique_ptr变量,就能看到它的原始结构体了,比如_M_t里的指针和deleter细节。

永久禁用(每次启动GDB都生效)

如果不想每次调试都重复操作,可以修改GDB的初始化文件:

  • Linux/macOS:编辑~/.gdbinit文件
  • Windows:编辑%USERPROFILE%\.gdbinit文件

在文件末尾添加一行刚才的精准禁用命令:

disable pretty-printer global libstdc++-v3 std::unique_ptr

保存后,下次启动GDB时,这个打印机就自动被禁用了。

小技巧:临时查看原始结构(不用禁用打印机)

如果只是偶尔想看看unique_ptr的原始结构,不想专门去禁用打印机,可以用/r(raw)参数打印:

print /r my_unique_ptr

这个命令会跳过美化打印机,直接输出变量的原始内存布局,用完也不用恢复设置,非常方便。

内容的提问来源于stack exchange,提问作者user2771324

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:29:47