在 GDB 中使用漂亮的打印机遍历链表

Traversing the linked list using pretty printers in GDB

我有一个链接列表漂亮的打印机,它从命令提示符处获取输入。 例如,打印 xyz

我的代码如下:

class Randomcalss:
    def __init__(self, val):
        self.val = int(val)

    def to_string(self):
        return "printing linked list:"

    def children(self):
        for field in self.val.type.fields():
            key = field.name
            val = self.val[key]
            yield key,val.dereference()

它确实按预期工作,并打印:

 printing linked list:= {head = {next = 0x625590, prev = 0x623c70}}

但是如果我想遍历链表并进一步进行我该怎么办。 因为每次我尝试访问 head['next'] 它都说 head 是一个字符串并且字符串索引必须是整数。

我不能做类似 self.val[key] 的事情来访问 head 的下一个节点吗?

您可以执行 val.dereference()['next'],这将为您提供列表中下一个成员的地址。您可以转换获得的值(如果需要)并进一步遍历。