gdb漂亮的打印不起作用

时间:2016-09-28 04:54:47

标签: c++ debugging stl gdb g++

我正在尝试查看C ++ STL容器的内容。我读了here,默认情况下gcc和gdb的最新版本支持相当打印但是当我尝试显示地图时,我得到了以下内容:

enter image description here

然后,我尝试根据this回答设置漂亮的打印,但仍显示相同的输出。有人可以帮帮我吗?感谢。

我正在使用Ubuntu 16.04,g ++ 5.4.1,GDB 7.11.1和python 2.7.12(从其官方来源安装)。

3 个答案:

答案 0 :(得分:3)

在你提到的另一个帖子中已经提到过某些版本的GDB work with Python 3 only

可以排除可能的原因,因为就您的描述而言,您没有收到任何错误。

sourceware.org结束时建议

  

您可以使用Python编程语言扩展gdb。仅当gdb使用configure --with-python时才能使用此功能。

不确定您是否这样做,因为您使用的指南没有直接提及。

答案 1 :(得分:2)

Ubuntu 16.04原生的gdb应该可以打印std::map;从class StdMapPrinter包中的以下文件中处理libstdc++6的python代码:

/usr/share/gcc-5/python/libstdcxx/v6/printers.py

如果您的目标是使用从源代码构建的二进制文件来实现此目的,那么首先使用本机Ubuntu软件包作为比较的基础可能仍然有用。漂亮的打印机不能在你自己构建的gdb中运行的可能原因是libstdcxx/v6/printers.py(python命名空间中的libstdcxx.v6.printers)不是gdb期望找到它的地方。

此外,Ubuntu 16.04的原生gdb链接到python3,而不是python2;一种看待它的方法是在

的输出中
ldd /usr/bin/gdb

Ubuntu 16.04的原生libstdcxx.v6.printers似乎可以与python2或python3一起使用。

如果尚未安装本机gdb二进制文件,则可以使用:

apt install gdb

答案 2 :(得分:1)

马克是对的。我使用--with-python选项构建了我自己的 gdb 8.0 版本,但我仍然无法看到容器内容。 gdb 显示了所有复杂的结构。所以我遵循马克的建议。

您需要在 gdb 安装目录中创建一个软链接(自动加载)。 如果您的 gdb 安装目录是$HOME/gdb_install,那么

cd $HOME/gdb_install/share/gdb

ln -s /usr/share/gdb/auto-load auto-load
我的Ubuntu安装中已经存在

/usr/share/gdb/auto-load。这是 gdb 版本7.11.1

之后 gdb 显示容器内容。谢谢Mark。

相关问题