我试图以干净的方式在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支持?
答案 0 :(得分:4)
Python漂亮的打印机需要做两件事:
第一部分应该可用于最近的Linux发行版(Archer分支已经合并到GDB 7.0中,所以如果你有7.0或更新的GDB,你应该没问题。)
第二部分要求你安装漂亮的打印机,以便GDB可以找到它。你很可能错过了这一部分。
最终GDB将能够自动找到漂亮的打印机,但这个功能更新(我认为它只在GDB 7.2中)和要求GLIB维护人员用{{分发他们漂亮的打印机1}},(我猜)他们还没有完成。
您可以查看:libglib2.0-0-dbg
。如果这没有列出任何dpkg -L libglib2.0-0-dbg | grep '\.py$'
文件,则缺少漂亮的打印机。如果是,它们可能存在,但是GDB没有找到它们。
GHashTable的漂亮打印机似乎已添加here。