但是这些容器类结构不是gdb维护的内容,必然会经常变化,了解stl容器类的实现也只有代码作者才知道,所以这个pretty-print最好由stl库的作者来配合代码一起实现。 这反过来就需要gdb提供一种机制,可以让源代码(C++源代码)的作者注册特定结构的printer。gdb提供的这种注册机制就是基于python实现的pretty-printer。 使用python...
如果使用gdb 自带的STL pretty printer,那么我们会得到如下简洁的结果, (gdb) p s $1 = {mName = "student", mField1 = std::map with 0 elements, mField2 = std::set with 0 elements, mI = 3, mj = 4} 如果自己编写pretty printer,那么就会得到如下的结果, (gdb) p s $2 = MyStruct nam...
其中,'/path/to/stl-pretty-printer'是STL漂亮打印器的路径,你可以从GitHub上找到并下载。 将.gdbinit文件放置在你的工程目录下,或者将其路径添加到环境变量中。 使用Gdb调试你的程序,并在需要打印STL容器的地方设置断点。 当程序运行到断点处时,可以使用"p"命令(或"print"命令的简写)来打印STL容器变量。例如,对...
GDB 从7.x版本开始就支持pretty printer 可是一直以来都没有见到这个东西起作用,最近就研究了一下。 我的环境是Mac Mountain Lion + macports,GCC 4.7,GDB 7.5 首先,按照 http://sourceware.org/gdb/wiki/STLSupport 下载checkout STL的pretty printer。 设置好.gdbinit以后,运行告知已经注册,不能重复注册。 $l...
STLSupport - GDB Wiki(看这个即可) gcc - git Writing a Pretty-Printer 可能出现的错误 路径配置错误,导致导入报错 路径写到Python即可 -- 版本错误 在打印unordered_map时,报错,说是缺少方法或成员 可能的原因:因为编译新项目,更新了动态库libstdc++.so.6.19->libstdc++.so.6.21 ...
gdb调试中的"pretty" 1. 解释什么是gdb调试中的"pretty" 在gdb调试中,"pretty"指的是一种美化输出格式的功能,它允许用户以更易读的方式查看复杂数据结构(如C++ STL容器、自定义结构体等)的内容。通过使用"pretty print"(美化打印),gdb可以显示数据结构的内部成员和值,而不仅仅是内存地址或原始数据,从而极大地提...
在咨询了谷歌之后,发现了一个有用的帖子https://stackoverflow.com/questions/42896196/pretty-print-not-working-for-c-stl-list。 以下这段用引用自该帖子: 很好地打印出数据结构是一些GDB扩展 机制的Python 代码的函数。GDB 手册中有一节介绍了GDB中的漂亮打印。
Check your gcc version. If it is less than 4.7, you need use another printer.py file. Get the file fromhttp://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch/libstdc++-v3/python/. http://lumiera.org/documentation/technical/howto/DebugGdbPretty.html ...
这一特性的背后,离不开Pretty-Printer的功劳。Pretty-Printer允许用户使用python给指定类编写自定义的打印方式。事实上,gdb内置了一个python脚本,正是这个脚本决定了STL容器的打印输出。 项目中的某个类太过于复杂? 正在使用某个自定义的数据结构? 想要快速看出某个属性的编码代表什么?
在GDB pretty打印机中显示特定的std::vector元素 使用注释和漂亮的打印机 不带类型信息的Gdb stl漂亮打印 漂亮的地图打印机抛出类型错误 整齐划一的列表漂亮打印机 JavaScript数据格式化/漂亮的打印机 从haskell-src-exts修改漂亮的打印机 实现自定义漂亮打印机的最佳方式 如何将内部值用作gdb漂亮打印的数组? ESLint:...