【问题标题】:printing a GHashTable out in GDB在 GDB 中打印 GHashTable
【发布时间】:2011-04-25 16:22:14
【问题描述】:

我正在尝试以一种干净的方式在 GDB 中打印出 GHashTable。我在 Archer 项目上找到了一个博客,它显示了很好地打印出 GHashTable 的能力: http://blogs.gnome.org/alexl/2009/09/21/archer-gdb-macros-for-glib/

据我了解,这个 Archer 项目的功能已被推入 GDB 主流。

在 GDB 中我这样做:

set print pretty on

然后我尝试打印出哈希表,但它仍然只给了我一个内存地址:

(gdb) print call_data->fields->field_indicies
$3 = (GHashTable *) 0x87f4580

如果我尝试取消引用 GDB 中的指针,我会得到一个不完整的类型:

(gdb) print *call_data->fields->field_indicies
$2 = <incomplete type>

我正在运行 Ubuntu,并且安装了 libglib2.0-0-dbg:

gnychis@qc2:~/Documents/wireshark_native$ sudo apt-get install libglib2.0-0-dbg
Reading package lists... Done
Building dependency tree       
Reading state information... Done
libglib2.0-0-dbg is already the newest version.

有谁知道我还能如何打印出来?或者为什么我没有适当的 glib 和 gdb 支持?

【问题讨论】:

    标签: debugging gdb glib


    【解决方案1】:

    要让 Python 漂亮的打印机工作,您需要做两件事:

    1. 一个支持 Python 漂亮打印机的 GDB 和
    2. 一个实际的 Python 代码来漂亮地打印您想要的类型

    第一部分应该可用于最近的 Linux 发行版(Archer 分支已合并到 GDB 7.0,所以如果你有 7.0 或更新的 GDB,你应该没问题)。

    第二部分需要安装漂亮的打印机,以便 GDB 可以找到它。你可能错过了那部分。

    最终 GDB 将能够自行自动找到漂亮的打印机,但该功能较新(我认为它仅在 GDB 7.2 中提供)并且需要 GLIB 维护人员通过 @987654322 分发他们的漂亮打印机@,(我猜)他们还没有完成。

    您可以查看:dpkg -L libglib2.0-0-dbg | grep '\.py$'。如果这没有列出任何.py 文件,则不存在漂亮的打印机。如果有,它们可能存在,但 GDB 没有找到它们。

    GHashTable 的漂亮打印机似乎已添加here

    【讨论】:

    • 非常感谢您的回复,非常感谢。我有 GDB 7.2.50,所以我认为我的 GDB 版本足够高。但是,我没有从您给我的 dpkg 命令中得到任何输出。你知道我在哪里可以获得漂亮的安装指南吗?
    • 您知道过去三年有什么变化吗? Ubuntu 14.04 或更高版本是否默认提供 python 代码?
    猜你喜欢
    • 2017-07-10
    • 2012-01-12
    • 2010-09-11
    • 1970-01-01
    • 2015-01-08
    • 2011-07-24
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多