debugging - 在 GDB 中打印 GHashTable

标签 debugging gdb glib

我正在尝试以干净的方式打印 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 要工作需要满足两件事:

  1. 支持 Python pretty-print 的 GDB 和
  2. 实际的 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/

相关文章:

c++ - 在 Linux 中链接时发生库冲突,但在 OSX 中则不会

c - GDBus 相当于 dbus_connection_setup_with_g_main()

使用 dbus-binding-tool 的 glib dbus 服务示例?

c++ - 如何在没有转储的情况下使用 WinDbg 查看某个偏移量处的代码?

java - eclipse 断点 : stop before leaving a Java method

c++ - Linux jdk1.6.0_25 x64(64 位)中的可能回归

c - GIOChannel 有时读取有时不读取

.net - Windows 7 上 mscoree.dll 的位置和实例

visual-studio - 为什么在 Resharper/MSTest 下调试时引用的 dll 会被锁定?

c++ - 在 cuda-gdb 中数组值更改时设置断点