GDB распечатать целое дерево указателей - PullRequest
0 голосов
/ 31 октября 2018

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

#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. Есть ли самый ленивый способ, чем те?

1 Ответ

0 голосов
/ 01 ноября 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...