Gdb печатает все дерево указателей

Пусть самый ленивый связанный список вроде:

#include <assert.h>

[...]

struct value {
  int i_;
};

struct values {
  struct value * first;
  struct values * next;
};

[...]

struct values values_;

[...]

assert(values_ != NULL);
assert(values_->first != NULL);
assert(values_->first->i_ == 4);
assert(values_->next != NULL);
assert(values_->next->first != NULL);
assert(values_->next->first->i_ == 8);
assert(values_->next->next == NULL);

Я читал в https://stackoverflow.com/a/46289993, что print *values_ является улучшением по сравнению с print values_, затем print values_->first и print values_->next.

Но я не знаю, как получить что-то вроде $i = {first = 0x?????? {i_ = 4}, next = 0x?????? {first = 0x?????? {i_ = 8}, next = 0x0}} с помощью одной команды gdb.

Есть https://stackoverflow.com/a/16493871/1737973 и https://sourceware.org/gdb/current/onlinedocs/gdb/Pretty-Printing.html. Есть ли самый ленивый способ, чем те?

0
0
413
1

Ответы 1

Вы могли бы что-то солгать (непроверено):

(gdb) define plist
set var $h = $0
while $h != 0
 print *$h
 set var $h = $h->next
end
end

а затем используйте (gdb) plist values_.

Другие вопросы по теме