You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kdbg/doc/ru/types.html

127 lines
6.0 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!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>