GDB с красивыми принтерами Qt - PullRequest
10 голосов
/ 11 февраля 2011

Моя цель - разрешить красивую печать классов Qt в gdb.Т.е. если у меня есть:

QString str("str"); 

в моем коде и я выполняю

(gdb) print qwe 

Я хочу, чтобы содержимое str было напечатано (не настоящая структура QString).

сам gdbподдержка симпатичных принтеров, которые должны быть определены с помощью python, и кажется, что Qt Creator частично использует эту функцию.

Идеальным решением было бы использовать симпатичные принтеры, поставляемые с Qt (можно найти в QT_INSTALLATION \ share \ qtcreator \ gdbmacros) или, может быть, даже весь отладчик (можно найти в QT_INSTALLATION \ pythongdb).

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

Итак, есть ли способ запустить gdb с включенными симпатичными принтерами Qt без Qt Creator, или, может быть, есть какая-нибудь информация о том, как управлять этим.

Ответы [ 3 ]

3 голосов
/ 15 февраля 2011

Не думаю, что Qt Creator использует симпатичные принтеры в строгом смысле 1002 *, они, вероятно, Интерфейс GDB / MI для прямого доступа к переменным и их содержимому. Если вы хотите использовать Pretty Printers для отображения содержимого QString, вы можете просто проверить, где в типе находится настоящая строка, а затем показать ее. Вот пример для типа C ++ std::string:

 class StdStringPrinter:
     "Print a std::string"

     def __init__ (self, val):
         self.val = val

     def to_string (self):
         return self.val['_M_dataplus']['_M_p']

     def display_hint (self):
         return 'string'

Обратите внимание на доступ к интервальным переменным класса на val['_M_dataplus']['_M_p'].

2 голосов
/ 02 июня 2011

На самом деле есть красивые принтеры для qt: http://nikosams.blogspot.com/2009/10/gdb-qt-pretty-printers.html

0 голосов
/ 24 мая 2011

Qt Creator действительно использует скрипты gdb на python для красивой печати, но он не использует механизм симпатичной печати на основе python, который не обрабатывает более сложные случаи, например свойства QObject.Этот механизм производит вывод в стиле GDB / MI (немного похожий на JSON), поэтому люди не могут его легко прочитать в командной строке.На http://doc.qt.nokia.com/qtcreator-snapshot/creator-debugging-helpers.html

есть минималистичная документация интерфейса
...