Я пытаюсь использовать красивые средства печати GDB, чтобы показать собственный матричный класс C++.
Класс вполне стандартный вы можете найти где угодно. Это шаблон, параметризованный типом, и к нему можно получить доступ с помощью нотации C-типа, такой как mat[i][j]. Этот первый неявно возвращает другой шаблонный класс «Slice», представляющий строку или столбец, к которому снова можно получить доступ с помощью оператора [] для извлечения данных. Сам класс использует простой массив C для хранения, но он реализует некоторые трюки с ним, такие как возможность предварительного выделения большей матрицы, разрешение ненулевых запусков, использование шага и т. д. Класс не имеет встроенной печати интерфейс, и я не могу легко изменить его или связать с моим собственным кодом.
Пользовательские функции затрудняют воспроизведение кода прямого доступа к данным в Python. Но так ли это необходимо? В общем: почему красивая печать должна воспроизводить логику доступа к данным? Разве я не могу просто использовать вызовы С++ и использовать операторы [] для печати i, j-го элемента? Тот факт, что класс Slice является временным в GDB во время такого запроса, еще больше усложняет ситуацию.
Я также новичок в написании сценариев на python и GDB. Я попытался взломать примеры, чтобы заменить доступ к данным вызовами gdb.execute, но я понятия не имею, как получить доступ к имени объекта из функции to_string, поэтому я могу использовать что-то вроде gdb.execute(??? + '[] +str(i)+']', False, True).
Интересно, какой самый эффективный способ сделать это.