【问题标题】:gdb pretty printing is not workinggdb 漂亮的打印不起作用
【发布时间】:2016-09-28 04:54:47
【问题描述】:

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

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

我使用的是 Ubuntu 16.04、g++ 5.4.1、GDB 7.11.1 和 python 2.7.12(从他们的官方来源安装)。

【问题讨论】:

  • 您是否遵循this 指南?假设您正在运行 Linux 而不是使用 eclipse,因此可以排除 Windows 设置和 eclipse 兼容性作为可能的原因,这一假设是否正确?
  • 我使用的是 Ubuntu 16.04。是的,我已遵循本指南。我仍然得到如上所示的输出:(
  • 您的问题并不清楚您是使用发行版附带的GDB,还是构建您自己的。如果是前者,它应该可以工作。如果是后者,你可能没有正确构建它。
  • 你能告诉我们你添加的任何 python 初始化文件以及你的 gdb 安装目录的路径名吗?通常在 Ubuntu 上,让 gdb 加载 C++ 漂亮打印机所需要做的就是将 yourinstalldir/share/gdb/auto-load (在全新的 gdb 安装中不存在)符号链接到 /usr/share/gdb/auto-loadauto-load 目录树和漂亮的打印机由 Ubuntu 上的 libstdc++6 包提供。

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


【解决方案1】:

在你提到的其他线程中提到了某些版本的 GDB work with Python 3 only

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

sourceware.org建议

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

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

【讨论】:

  • 嗨,我尝试运行gdb a.out --with-python ,它显示gdb: unrecognized option '--with-python'
  • @piyukr 你将--with-python 传递给GDB configure 脚本。一旦构建了 GDB,就为时已晚。
  • 我尝试再次构建 gdb,这次使用 ./configure --with-python -> rm -r \usr\bin\gdb -> make -> make install 但我得到this。你能告诉我应该如何解决这个问题吗?
  • 您的 Imgur 链接中的错误消息说您应该安装 makeinfo。对于 Ubuntu,apt install texinfo 应该可以做到这一点。
【解决方案2】:

Ubuntu 16.04 原生的 gdb 应该能够漂亮地打印 std::map;处理class StdMapPrinter 的python 代码在libstdc++6 包中的以下文件中:

/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

【讨论】:

    【解决方案3】:

    马克是正确的。我使用 --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
    

    /usr/share/gdb/auto-load 已经存在于我的 Ubuntu 安装中。这是gdb 版本7.11.1

    之后 gdb 显示容器内容。谢谢马克。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多