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

如何在GDB控制台中非递归(浅度)打印变量?

解决GDB pretty printer无限递归的浅度打印方法

以下几种方法可以实现非递归(浅度)打印变量,避免触发pretty printer的children方法或限制递归深度:

  • 临时禁用目标类型的pretty printer

    1. 执行 info pretty-printer 列出所有已加载的pretty printer,找到你实现的对应类型的printer(比如显示为 your_namespace::YourClass (enabled))。
    2. 执行 disable pretty-printer <索引>(替换<索引>为对应printer的编号),禁用该printer。
    3. 执行 set print depth 1 限制打印深度为顶层,再用 print myvar 即可浅度打印变量,不会触发递归。
    4. 调试完成后,用 enable pretty-printer <索引> 恢复printer。
  • 限制打印深度并保留pretty printer的顶层显示
    如果想保留pretty printer的to_string格式化结果,但不展开子项,直接执行:

    set print depth 1
    print myvar
    

    此时GDB会调用to_string生成顶层描述,但只会尝试展开第一层子项(不会递归深入),避免循环结构导致的无限递归挂起。

  • 直接调用pretty printer的to_string方法
    如果你只想获取to_string的输出,完全不触发children,可以在GDB的Python交互环境中手动调用:

    1. 执行 python 进入GDB的Python shell。
    2. 输入以下代码(替换your_type和myvar为实际类型和变量名):
      val = gdb.parse_and_eval("myvar")
      printer = gdb.default_visualizer(val)
      print(printer.to_string(val))
      
    3. 执行 end 退出Python shell。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.02 04:44:54