[Содержание]   [Назад]   [Пред]   [Вверх]   [След]   [Вперед]  


10. Исследование таблицы символов

Команды, описанные в этой главе, позволяют вам получить информацию о символах (именах переменных, функций и типов), определенных в вашей программе. Эта информация присуща тексту вашей программы и не изменяется при ее выполнении. GDB находит эту информацию в таблице символов вашей программы, в файле, определенном при его вызове (см. раздел 2.1.1 Выбор файлов), или посредством одной из команд управления файлами (см. раздел 12.1 Команды для задания файлов).

Иногда вам может потребоваться сослаться на символы, содержащие необычные знаки, которые GDB обычно трактует как разделители слов. Наиболее часто это встречается при ссылках на статические переменные в других исходных файлах (см. раздел 8.2 Переменные программы). Имена файлов записаны в объектных файлах как отладочные символы, но GDB обычно производит разбор типичного имени файла, например `foo.c', как три слова: `foo' . c. Чтобы GDB идентифицировал `foo.c' как одно слово, заключите его в одинарные кавычки; например,

p 'foo.c'::x

ищет значение x в области видимости файла `foo.c'.

info address символ
Описывает, где хранятся данные для символа. Для регистровой переменной сообщается, в каком регистре она содержится. Для нерегистровой локальной переменной печатается смещение в кадре стека, по которому переменная всегда хранится. Заметьте отличие от команды `print &символ', которая вообще не работает для регистровых переменных, а для локальной переменной из стека печатает точный адрес текущего экземпляра переменной.
whatis выраж
Напечатать тип данных выражения выраж. На самом деле выраж не вычисляется, и присутствующие в нем побочные операции (такие как присваивания или вызовы функций) не выполняются. См. раздел 8.1 Выражения.
whatis
Вывести тип данных $, последней записи в истории значений.
ptype имя-типа
Вывести описание типа данных имя-типа. Имя-типа может быть именем типа или, для кода Си, может иметь форму `class имя-класса', `struct тег-структуры', `union тег-объединения' или `enum тег-перечисления'.
ptype выраж
ptype
Вывести описание типа выражения выраж. ptype отличается от whatis тем, что выводится детальное описание, а не только имя типа. Например, для такого описания переменной:
struct complex {double real; double imag;} v;
эти две команды выведут следующее:
(gdb) whatis v
type = struct complex
(gdb) ptype v
type = struct complex {
    double real;
    double imag;
}
Как и whatis, использование ptype без параметра относится к типу $, последней записи в истории значений.
info types рег-выр
info types
Вывести краткое описание всех типов, имена которых соответствуют регулярному выражению рег-выр (или всех типов вашей программы, если вы используете эту команду без параметра). Каждое полное имя типа сопоставляется так, как если бы оно было полной строкой; таким образом, `i type value' выдает информацию обо всех типах в вашей программе, чьи имена включают строку value, а `i type ^value$' выдает информацию только о типах с полным именем value. Эта команда отличается от ptype следующим: во-первых, как и whatis, она не выводит детального описания; во-вторых, она перечисляет все исходные файлы, где определен тип.
info source
Показать имя текущего исходного файла -- то есть исходного файла для функции, содержащей текущую точку выполнения, и язык, на котором она написана.
info sources
Вывести имена всех исходных файлов вашей программы, для которых имеется отладочная информация, организуя их в два списка: файлы с уже прочитанными символами, и файлы, символы которых будут прочитаны, когда потребуется.
info functions
Вывести имена и типы данных всех определенных функций.
info functions рег-выр
Вывести имена и типы данных всех определенных функций, чьи имена удовлетворяют регулярному выражению рег-выр. Так, `info fun step' находит все функции, имена которых содержат step; `info fun ^step' находит функции с именами, начинающимися со step.
info variables
Напечатать имена и типы данных всех переменных, объявленных вне функций (то есть исключая локальные переменные).
info variables рег-выр
Вывести имена и типы данных всех переменных (кpоме локальных), имена которых удовлетворяют регулярному выражению рег-выр. Некоторые системы допускают замещение отдельных объектных файлов, составляющих вашу программу, без ее остановки и перезапуска. Например, в VxWorks вы можете просто перекомпилировать дефектный объектный файл и продолжить выполнение. Если вы работаете в одной из таких систем, вы можете позволить GDB перезагрузить символы для автоматически пересобранных модулей:
set symbol-reloading on
Заменить определения символов для соответствующего исходного файла, когда объектный файл с определенным именем снова доступен.
set symbol-reloading off
Не заменять определения символов при встрече объектного файла с таким же именем более одного раза. Это состояние по умолчанию; если вы не работаете в системе, допускающей автоматическое пересобирание модулей, вы должны оставить symbol-reloading в состоянии off, так как иначе GDB может уничтожить символы пpи сборке больших программ, которые могут содеpжать несколько модулей с одинаковым именем (из разных каталогов или библиотек).
show symbol-reloading
Показать текущую установку on или off.
set opaque-type-resolution on
Велит GDB производить разрешение неоднозначных типов. Неоднозначным является тип, описанный как указатель на struct, class или union -- например, struct MyType * -- то есть, используется в одном исходном файле, хотя полное описание struct MyType находится в другом исходном файле. По умолчанию установлено в on. Изменения в установке этой подкоманды не вступят в силу, пока не будут загружены символы для какого-нибудь файла.
set opaque-type-resolution off
Указывает GDB не производить разрешение неоднозначных типов. В этом случае, тип выводится следующим образом:
{<no data fields>}
show opaque-type-resolution
Показать, производится разрешение неоднозначных типов или нет.
maint print symbols имя-файла
maint print psymbols имя-файла
maint print msymbols имя-файла
Записать дамп данных отладочных символов в файл имя-файла. Эти команды используются для отладки кода GDB, осуществляющего чтение символов. Включаются только символы с отладочными данными. Если вы используете `maint print symbols', GDB включает все символы, для которых уже собрана полная информация: то есть имя-файла отражает символы только для тех файлов, символы которых GDB уже прочитал. Вы можете использовать команду info sources, чтобы определить, какие это файлы. Если же вы используете `maint print psymbols', дамп показывает информацию о тех символах, о которых GDB имеет лишь частичную информацию, то есть символы определены в файлах, которые GDB только просмотрел, но не прочитал полностью. Наконец, `maint print msymbols', выводит только минимальную информацию о символах, требуемую для каждого объектного файла, из которых GDB пpочитал какие-либо символы. См. раздел 12.1 Команды для задания файлов, где обсуждается, как GDB считывает символы (в описании symbol-file).


[Содержание]   [Назад]   [Пред]   [Вверх]   [След]   [Вперед]