в GDB вы можете напечатать * подмножество * переменной-члена, динамически генерируемой симпатичным принтером? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть симпатичный принтер для класса двумерного массива, который преобразует базовый одномерный массив в двумерный массив.

class MyArray
{
  int *data;
  int width, height;
};

Это достигается с помощью функции дочерней функции симпатичного принтера, генерирующей динамический элемент data2 (бросаетданные в int [3] [2]).Это то, что вы видите

{data2 = {{0, 1}, {1, 2}, {2, 3}}, data = 0x555555767e70, ширина = 2, высота = 3}

Однако, если массив огромен, тогда я просто хочу напечатать подмножество данных2.Но «print myarray.data2» не работает, потому что data2 является динамически генерируемым членом.Я думал, что это должно быть возможно, потому что контейнеры STL имеют красивые принтеры, и вы можете использовать [] для печати отдельных элементов, но оказывается, что [] не использует динамически генерируемые элементы - просто вызывает оператор C ++ [].

Затем я обнаружил в Eclipse, что он позволяет вам проверять отдельные элементы данных2.Кажется, это потому, что Eclipse использует интерфейс MI GDB, который поддерживает проверку отдельных элементов.Вот последовательность команд для печати элемента [0] [0]:

-enable-pretty-printing
-var-create myarray_ * myarray
-var-list-children myarray_
-var-list-children myarray_.data2
-var-list-children my_array_.data2.0
-var-evaluate-expression my_array_.data2.0.0

Но для людей, не использующих Eclipse, я все еще хочу, чтобы обычная командная строка GDB позволяла проверять динамические элементы.Это возможно?

...