如何在GDB控制台中非递归(浅度)打印变量?
解决GDB pretty printer无限递归的浅度打印方法
以下几种方法可以实现非递归(浅度)打印变量,避免触发pretty printer的children方法或限制递归深度:
临时禁用目标类型的pretty printer
- 执行
info pretty-printer列出所有已加载的pretty printer,找到你实现的对应类型的printer(比如显示为your_namespace::YourClass (enabled))。 - 执行
disable pretty-printer <索引>(替换<索引>为对应printer的编号),禁用该printer。 - 执行
set print depth 1限制打印深度为顶层,再用print myvar即可浅度打印变量,不会触发递归。 - 调试完成后,用
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交互环境中手动调用:- 执行
python进入GDB的Python shell。 - 输入以下代码(替换
your_type和myvar为实际类型和变量名):val = gdb.parse_and_eval("myvar") printer = gdb.default_visualizer(val) print(printer.to_string(val)) - 执行
end退出Python shell。
- 执行
内容的提问来源于stack exchange,提问作者stgatilov
相关产品推荐
相关产品推荐

