|
|
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
|
|
<html>
|
|
|
<head>
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r">
|
|
|
<meta name="Author" content="Johannes Sixt">
|
|
|
<title>KDbg - Руководство Пользователя - Таблицы Типов</title>
|
|
|
</head>
|
|
|
<body text="#000000" bgcolor="#FFFFFF" link="#0000EF" vlink="#51188E" alink="#FF0000">
|
|
|
<a href="index.html">Содержание</a>
|
|
|
<h1>Таблица Типов KDbg</h1>
|
|
|
KDbg может отображать содержимое отдельно взятых членов структурированных типов
|
|
|
данных, таким образом отсутствует необходимость в раскрытии переменных в
|
|
|
<a href="localvars.html">окне локальных переменных</a> или в
|
|
|
<a href="watches.html">окне отслеживаемых выражений</a>. Информация о том,
|
|
|
переменная какого члена отображается, хранится в <i>таблицах типов</i>. Обычно
|
|
|
существует одна таблица на разделяемую библиотеку.
|
|
|
<p>Таблицы типов KDbg расположены в каталоге
|
|
|
<tt>$TDEDIR/share/apps/kdbg/types</tt>. Имена файло таблиц оканчиваются на
|
|
|
<tt>.kdbgtt</tt>. Например, таблица типов для <tt>libtqt.so</tt> называется
|
|
|
<tt>qt.kdbgtt</tt>.
|
|
|
<p>Файлы таблиц типов соответствуют стандартному синтаксису файлов конфигурации
|
|
|
KDE. Файл содержит следующие группы:
|
|
|
<ul>
|
|
|
<li>
|
|
|
Группу <tt>[Type Table]</tt>, в которой перечислены типы и информация о том,
|
|
|
как отладчик может определить, слинкована ли программа с этой библиотекой.</li>
|
|
|
|
|
|
<li>Группу на каждый прописанный тип, в которой содержится информация о том,
|
|
|
как KDbg должен отображать данный тип.</li>
|
|
|
</ul>
|
|
|
Для определения таблиц типов, применимых к отлаживаемой программе, KDbg
|
|
|
запрашивает список разделяемых библиотек, с которыми слинкована программа.
|
|
|
Затем он осуществляет поиск имен этих библиотек в таблицах типов в элементах
|
|
|
<tt>ShlibRE</tt>. Используются те таблицы, в которых были найдены
|
|
|
соответствующие имена библиотек. Если тип появляется в нескольких таблицах, то
|
|
|
неопределено, какое же из описаний будет выбрано.
|
|
|
<h2>Группа <tt>[Type Table]</tt></h2>
|
|
|
Эта группа содержит следующие элементы:
|
|
|
<ul>
|
|
|
<li>
|
|
|
<tt>Types1</tt>, <tt>Types2</tt>, и тд. Эти элементы являются именами типов.
|
|
|
Каждый из них представляет собой разделенный запятыми список имен типов. В
|
|
|
каждом элементе может быть перечислено любое количество типов. (Имена типов
|
|
|
можно разбить на несколько строк, чтобы они строки не получались слишком
|
|
|
длинными.) В этих строках недопустимы символы пробела. Элементы должны
|
|
|
нумероваться последовательно (KDbg прекращает чтение на первом же пропуске),
|
|
|
однако элементы могут быть пусты (т.е. вообще не содержать типов). Иногда
|
|
|
порядок перечисления имен имеет значение (см. пример с <tt>Alias</tt> ниже).
|
|
|
</li>
|
|
|
|
|
|
<li>
|
|
|
<tt>ShlibRE</tt>. KDbg использует этот элемент для определения, использовать
|
|
|
ли данную таблицу к текущей отлаживаемой программе. Для этого KDbg определяет
|
|
|
разделяемые библиотеки, используемые программой. Если хотя бы одна из них
|
|
|
совпадает со значением этого элемента, таблица используется. Используемые
|
|
|
регулярные выражения совпадают с регулярными выражениями TQt (метасимволы
|
|
|
<tt>.*?[]^$\</tt> распознаются обычным образом, однако отсутсвует возможность
|
|
|
группировать символы.)</li>
|
|
|
|
|
|
<li>
|
|
|
<tt>LibDisplayName</tt>. Этот элемент используется в списках, в которых
|
|
|
доступные таблицы типов перечислены для указания данной таблицы типов.</li>
|
|
|
|
|
|
<br><font size=-1>На данный момент это не используется.</font></ul>
|
|
|
|
|
|
<h2>Группа типа</h2>
|
|
|
На каждый заявленый тип должна быть заведена группа, названная именем типа.
|
|
|
<font size=-1>На данный момент шаблоны С++ не поддерживаются.</font>
|
|
|
Каждая группа содержит следующие элементы:
|
|
|
<ul>
|
|
|
<li>
|
|
|
<tt>Display</tt> указывает, как KDbg должен отображать значение этого типа.
|
|
|
Строка может содержать от 1 до 5 символов '<tt>%</tt>'. Они заменяются на
|
|
|
результаты выражений, описанных в элементах <tt>Expr</tt><i>x</i>.</li>
|
|
|
|
|
|
<li>Один или более <tt>Expr1</tt>, <tt>Expr2</tt>, и тд. Каждый из них должен
|
|
|
содержать <b>только одну</b> последовательность <tt>%s</tt>, которая будет
|
|
|
заменена выражением, чье значение необходимо получить. Такие выражения
|
|
|
передаются gdb, а результат заносится на место соответствующего символа
|
|
|
процента в элементе <tt>Display</tt>.</li>
|
|
|
|
|
|
<li>
|
|
|
<tt>Alias</tt> указывает на тип-псевдоним. Если присутствует данная запись, то
|
|
|
с данным типом обходятся также, как с тем, на который он указывает. Этот
|
|
|
тип-псевдоним дожен быть описан перд ссылающимся на него типом в элементах
|
|
|
<tt>Types</tt><i>x</i> группы <tt>[Type Table]</tt>.</li>
|
|
|
</ul>
|
|
|
<font size=-1>На данный момент количество выражений для каждого типа ограничено
|
|
|
пятью. Это может быть с легкостью изменено, но я не рекомендую вообще
|
|
|
приближаться к данному рубежу - это только затормозить процесс отладки.</font>
|
|
|
<p>KDbg распознает специальное расширение, которое используется для вывода
|
|
|
строк TQt 2.0 в unicode: Если перед <tt>Expr</tt><i>x</i> стоит
|
|
|
<tt>/TQString::Data</tt>, подразумевается, что результат операции является
|
|
|
указателем на <tt>TQString::Data</tt>. Выводимое значение является строкой в
|
|
|
unicode, представленное <tt>TQString::Data</tt> (которое может быть
|
|
|
<tt>TQString::null</tt>, если это пустая строка TQt, или <tt>(null)</tt>, если
|
|
|
<tt>unicode</tt> член структуры является нулевым указателем). Для примера см.
|
|
|
<tt>qt2.kdbgtt</tt>.
|
|
|
|
|
|
<p>Совет: Совсем необязательно описывать наследуемые типы, если они должны
|
|
|
обрабатываться также как и базовый класс - KDbg может определить наследование
|
|
|
и использовать описание типа первого (слева) базового класса. Вы можете
|
|
|
использовать элемент <tt>Alias</tt> для быстрого указания класса при
|
|
|
множественном наследовании, отличного от первого слева.
|
|
|
<h2>Пример</h2>
|
|
|
Этот пример показывает, как <tt>TQString</tt> и <tt>TQObject</tt> описаны в
|
|
|
<tt>qt.kdbgtt</tt>. Дополнительно определен <tt>TQTableView</tt>, ссылающийся
|
|
|
на <tt>TQObject</tt>. Этот пример применим к TQt 1.x, который расположен в
|
|
|
разделяемых библиотеках, имена которых оканчиваются как <tt>libtqt.so.1</tt>.
|
|
|
<pre>[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</pre>
|
|
|
Замечание: гораздо безопаснее заключать <tt>%s</tt> в скобки.
|
|
|
</body>
|
|
|
</html>
|