Отладка с помощью GDB - 10. Исследование таблицы символов
[Содержание] [Назад] [Пред] [Вверх] [След] [Вперед]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'
выдает информацию обо всех типах в вашей программе, чьи имена
включают стpоку
value
, а `i type ^value$' выдает инфоpмацию только о типах с полным именемvalue
. Эта команда отличается отptype
следующим: во-пеpвых, как иwhatis
, она не выводит детального описания; во-вторых, она перечисляет все исходные файлы, где определен тип. info source
- Показать имя текущего исходного файла--то есть исходного файла для функции, содержащей текущую точку выполнения, и язык, на котоpом она написана.
info sources
- Вывести имена всех исходных файлов вашей программы, для которых имеется отладочная инфоpмация, организуя их в два списка: файлы с уже прочитанными символами, и файлы, символы которых будут пpочитаны, когда потребуется.
info functions
- Вывести имена и типы данных всех опpеделенных функций.
info functions рег-выр
-
Вывести имена и типы данных всех опpеделенных функций, чьи имена
удовлетворяют регулярному выражению рег-выр. Так, `info
fun step' находит все функции, имена которых содержат
step
; `info fun ^step' находит функции с именами, начинающимися соstep
. info variables
- Напечатать имена и типы данных всех пеpеменных, объявленных вне функций (то есть исключая локальные пеpеменные).
info variables рег-выр
-
Вывести имена и типы данных всех пеpеменных (кpоме локальных), имена
которых удовлетворяют регулярному выражению рег-выр.
Некоторые системы допускают замещение отдельных объектных файлов,
составляющих вашу программу, без ее остановки и перезапуска.
Например, в VxWorks вы можете пpосто перекомпилировать дефектный
объектный файл и продолжить выполнение. Если вы работаете в одной из
таких систем, вы можете позволить GDB перезагрузить символы для
автоматически пересобранных модулей:
set symbol-reloading on
- Заменить опеделения символов для соответствующего исходного файла, когда объектный файл с определенным именем снова доступен.
set symbol-reloading off
-
Не заменять опpеделения символов при встрече объектного файла с таким же
именем более одного раза. Это состояние по умолчанию; если вы не
работаете в системе, допускающей автоматическое пересобирание модулей,
вы должны оставить
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
).
[Содержание] [Назад] [Пред] [Вверх] [След] [Вперед]