0

使用 gdb-python 脚本,我正在尝试打印包括内核数据结构和列表(例如 struct list_head)的数据结构,该结构是

struct my_struct {
  struct my_hardware_context ahw;
  struct net_device *netdev;
  struct pci_dev *pdev;
  struct list_head mac_list;
  struct list_head wait_list;
  ....
  ....
};

因此,在迭代这个 struct my_struct 时,如何识别这个结构内有一个链表,因为 gdb 手册中没有任何 TYPE_CODE_ 常量用于链表,如果确定,在识别后如何在迭代列表时打印取消引用的结构。我在此链接gdb-python 中使用 scottt 的代码:解析结构的每个字段并以适当的值打印它们(如果存在)

4

1 回答 1

0

只有你,程序员,知道这是一个链表。甚至 C 编译器也不知道,因此 gdb 无法知道。

您可以编写一个漂亮的打印机,将这些字段视为链表。最简单的方法是将这些知识编码到您的打印机中。也就是说,让打印机的“children”方法遍历链表。

可能还有其他方法,例如为 list_head 类型创建一个单独的漂亮打印机。

于 2013-05-30T14:46:28.980 回答