我正在尝试以干净的方式打印 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 支持?
最佳答案
Python pretty-print 要工作需要满足两件事:
- 支持 Python pretty-print 的 GDB 和
- 实际的 Python 代码,用于漂亮地打印您想要的类型
第一部分应该适用于最近的 Linux 发行版(Archer 分支已合并到 GDB 7.0 中,因此如果您有 7.0 或更高版本的 GDB,应该没问题)。
第二部分要求您安装 pretty-print ,以便 GDB 可以找到它。您可能错过了该部分。
最终 GDB 将能够自行自动找到 pretty-print ,但该功能是较新的(我认为它仅在 GDB 7.2 中)并且需要 GLIB 维护人员使用 libglib2.0-0-dbg
分发他们的 pretty-print , (我猜)他们还没有做到。
您可以检查:dpkg -L libglib2.0-0-dbg | grep '\.py$'
。如果没有列出任何 .py
文件,则说明不存在 pretty-print 。如果有,它们可能存在,但 GDB 没有找到它们。
GHashTable 的 pretty-print 似乎已添加 here 。
关于debugging - 在 GDB 中打印 GHashTable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780440/