Print the whole linked list in gdb?

2020-06-12 03:08发布

问题:

I have a linked list

struct node {
    data_t data;
    node_t *next;
};

typedef struct {
    node_t *head;
    node_t *foot;
    node_t *curr;   // for iterator
    unsigned int size;
} list_t;

with this structure, let say I defined a list

list_t* myList;

How can I use GDB to print the whole linked list?

回答1:

This should work (but untested):

define plist
  set var $n = $arg0->head
  while $n
    printf "%d ", $n->data
    set var $n = $n->next
  end
end

(gdb) plist myList

You could put plist into ~/.gdbinit



回答2:

GDB is scriptable in Python. You can define your own pretty-printers and do other useful things.

Better yet, use a standard container, GDB now supports printing those natively.