Содержание

Таблица Типов KDbg

KDbg может отображать содержимое отдельно взятых членов структурированных типов данных, таким образом отсутствует необходимость в раскрытии переменных в окне локальных переменных или в окне отслеживаемых выражений. Информация о том, переменная какого члена отображается, хранится в таблицах типов. Обычно существует одна таблица на разделяемую библиотеку.

Таблицы типов KDbg расположены в каталоге $TDEDIR/share/apps/kdbg/types. Имена файло таблиц оканчиваются на .kdbgtt. Например, таблица типов для libtqt.so называется qt.kdbgtt.

Файлы таблиц типов соответствуют стандартному синтаксису файлов конфигурации KDE. Файл содержит следующие группы:

Для определения таблиц типов, применимых к отлаживаемой программе, KDbg запрашивает список разделяемых библиотек, с которыми слинкована программа. Затем он осуществляет поиск имен этих библиотек в таблицах типов в элементах ShlibRE. Используются те таблицы, в которых были найдены соответствующие имена библиотек. Если тип появляется в нескольких таблицах, то неопределено, какое же из описаний будет выбрано.

Группа [Type Table]

Эта группа содержит следующие элементы:

Группа типа

На каждый заявленый тип должна быть заведена группа, названная именем типа. На данный момент шаблоны С++ не поддерживаются. Каждая группа содержит следующие элементы: На данный момент количество выражений для каждого типа ограничено пятью. Это может быть с легкостью изменено, но я не рекомендую вообще приближаться к данному рубежу - это только затормозить процесс отладки.

KDbg распознает специальное расширение, которое используется для вывода строк TQt 2.0 в unicode: Если перед Exprx стоит /TQString::Data, подразумевается, что результат операции является указателем на TQString::Data. Выводимое значение является строкой в unicode, представленное TQString::Data (которое может быть TQString::null, если это пустая строка TQt, или (null), если unicode член структуры является нулевым указателем). Для примера см. qt2.kdbgtt.

Совет: Совсем необязательно описывать наследуемые типы, если они должны обрабатываться также как и базовый класс - KDbg может определить наследование и использовать описание типа первого (слева) базового класса. Вы можете использовать элемент Alias для быстрого указания класса при множественном наследовании, отличного от первого слева.

Пример

Этот пример показывает, как TQString и TQObject описаны в qt.kdbgtt. Дополнительно определен TQTableView, ссылающийся на TQObject. Этот пример применим к TQt 1.x, который расположен в разделяемых библиотеках, имена которых оканчиваются как libtqt.so.1.
[Type Table]
Types1=TQString
Types2=TQObject,TQTableView
LibDisplayName=libtqt 1.x
ShlibRE=libtqt\.so\.1$
[TQString]
Display={ % }
Expr1=(%s).shd->data
[TQObject]
Display={ name=% #chld=% }
Expr1=(%s).objname
Expr2=(%s).childObjects->numNodes
[TQTableView]
Alias=TQObject
Замечание: гораздо безопаснее заключать %s в скобки.