Написание кода на C ++ для печати массива и вызова его из GDB, безусловно, вариант, но он может быть ненадежным, потому что функция печати, которую вы пишете, может быть недоступна (компоновщик мог удалить ее, потому что она не использовалась в вашем код c ++, например). Кроме того, помните, что шаблоны - это просто «рецепты», и вам действительно нужно использовать их для того, чтобы компилятор генерировал из него класс / функцию.
Можно ли передавать переменные c ++ в * 1055? * интерфейс GDB и распечатать их? какие-нибудь примеры для того же самого?
Простой ответ на это - "да". Вы можете использовать функцию parse_and_eval
в модуле gdb
при использовании API python GDB. Что-то вроде
py print(gdb.parse_and_eval('your_variable'))
будет выводить значение переменной с именем your_variable
с использованием python API gdb. Но это будет то же самое, что и p your_variable
в обычном приглашении GDB без использования python API. Настоящая мощь приходит, когда вы используете python API GDB для написания pretty-printers для типов, которые вы хотите отлаживать.
Pretty-принтер - это, в основном, какой-то код, который вы или кто-то другой еще написал, чтобы сказать GDB, как правильно напечатать какой-нибудь тип. С симпатичным принтером для типа просто p your_variable
в приглашении GDB печатает переменную в хорошем виде, заданном вашим симпатичным принтером.
Я не смог найти симпатичный принтер для блиц с быстрым Google поиск, и я не использовал блиц раньше. Тем не менее, я использовал другую библиотеку для векторов и матриц в науке c, называемую броненосец , и поэтому столкнулся с похожими проблемами. Поэтому я написал несколько симпатичных принтеров для броненосца здесь , которые могут помочь вам, если вы решите написать симпатичные принтеры для блиц.
В качестве иллюстрации ниже вы можете увидеть, как arma::mat
(матрица чисел двойного типа) типа Armadillo печатается в GDB без симпатичного принтера (переменная m1
, представляющая собой матрицу чисел двойного размера 6x3)
![armadillo matrix without pretty printer](https://i.stack.imgur.com/KiWyZ.png)
Обратите внимание, что мы даже не можем видеть матричные элементы . Они хранятся в непрерывной области памяти, указанной атрибутом mem
объекта arma::mat
.
Теперь та же матрица с симпатичным принтером доступна здесь .
![armadillo matrix with pretty printer](https://i.stack.imgur.com/Y9yNo.png)
Это значительно облегчает отладку кода.
Примечание. Вы также можете писать симпатичные принтеры на языке guile, но держу пари python - гораздо более распространенный выбор.