diff options
Diffstat (limited to 'doc/ru/types.html')
-rw-r--r-- | doc/ru/types.html | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/doc/ru/types.html b/doc/ru/types.html new file mode 100644 index 0000000..6cb8453 --- /dev/null +++ b/doc/ru/types.html @@ -0,0 +1,126 @@ +<!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> |