GDB配置

gdb --help # 可查看配置文件路径

image
全局配置/etc/gdbinit;用户配置文件~/.gdbinit

以可读方式打印STL

当你尝试使用 GDB 的 "print"(打印)命令来显示向量、堆栈或任何其他 GDB 抽象数据结构的内容时,你将得到无用的结果。
GDB7.0之后,将支持用Python编写pretty-printers
这一特性配合libstdc++ svn(git)仓库,就是可视化C++容器的最好方式
配置方法主要分为两步

  1. 从gcc的仓库拉取对应的Python目录
  2. 配置gdbinit文件,使之加载pretty-printers脚本
# ~/.gdbinit
python
import sys
sys.path.insert(0, '/path/to/gdb_printers/python')
from libstdcxx.v6.printers import register_libstdcxx_printers
register_libstdcxx_printers (None)
end
info pretty-printers # 可查看已加载的pretty-printer

gdb的数据目录

gdb中,有一个设置记录了数据目录data-directory

show data-direcotry #查看数据目录位置

image
数据目录的内容如下,其中python目录下保存得是,gdb启动时自动加载的Python脚本
image

参考链接
STLSupport - GDB Wiki(看这个即可)
gcc - git
Writing a Pretty-Printer

可能出现的错误

路径配置错误,导致导入报错

路径写到Python即可

image

--
image

版本错误

在打印unordered_map时,报错,说是缺少方法或成员
可能的原因:因为编译新项目,更新了动态库libstdc++.so.6.19->libstdc++.so.6.21
导致STL代码与gcc提供的printers不匹配
解决方案:从gcc仓库下载对应版本的printers,在配置文件中加载
image
有时候并不一定是版本问题,只是软件抽风了,重新手动导入printer即可(推荐先手动导入试试,能不麻烦就不麻烦)
image

pretty-printers重复加载

这个报错是解决第二个问题的副作用
~/.gdbinit中加载了对应版本的Python脚本之后,就报了这个错误
image
其实解决这个报错也简单(虽然耗费了我很多精力
结合第二节的信息和报错信息,可以看到,python/gdb/printing.py中也加载了同名pretty-printer:libstdc++-v6
因此,将该printing.py删除,然后在.gdbinit中导入下载好的printers.py,重新启动gdb
发现pretty-printers加载正常
image

参考链接
gcc与libstdc++版本对应关系

posted @   lifeAddicted  阅读(82)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示