Gdb с красивыми принтерами Qt

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

QString str("str"); 

в моем коде и выполните

(gdb) print qwe 

Я хочу, чтобы напечатанный текст был напечатан (не реальная структура QString).

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

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

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

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

Ответ 2

Я не думаю, что Qt Creator использует довольно принтеры в строгом смысле, они, вероятно, используют Интерфейс GDB/MI для прямого доступа к переменным и их содержимому. Если вы хотите использовать Pretty Printers для отображения содержимого QString, вы можете просто проверить, где в типе находится настоящая строка, а затем показать ее. Вот пример для типа С++ 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'].

Ответ 3

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