Отладка с помощью GDB - 3. Команды GDB

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


3. Команды GDB

Вы можете сокращать команды GDB по нескольким первым символам имени команды, если это сокращение однозначно; и вы можете повторять определенные команды GDB простым нажатием RET. Вы также можете использовать клавишу TAB для того, чтобы GDB сам дополнил остаток слова в команде (или показал вам возможные альтернативы, если существует несколько вариантов).

3.1 Синтаксис команд

Команда GDB представляет собой одну строку ввода. Никаких ограничений на ее длину нет. Она начинается именем команды, за которым следуют параметры, значение которых определяется ее названием. Например, команда step допускает в качестве параметра число шагов, как в `step 5'. Вы также можете использовать команду step и без параметров. Некоторые команды не допускают никаких параметров.

Названия команд GDB всегда могут быть сокращены, если это сокращение однозначно. Другие возможные сокращения команд перечислены в документации по отдельным командам. В некоторых случаях, допускаются даже неоднозначные сокращения; напрмер, s специально определено как эквивалент step, даже если существуют другие команды, чьи названия начинаются на s. Вы можете проверить сокращения, задавая их как параметр для команды help.

Введенная пустая строка (просто нажатие RET), означает повтор предыдущей команды. Определенные команды (например, run) не повторяются таким способом; это те команды, непреднамеренное повторение которых может вызвать проблемы и которые вы вряд ли захотите повторять.

Команды list и x, при их повторе нажатием RET, вместо точного повтора создают новые параметры. Это позволяет легко просматривать исходный текст или память.

GDB может также использовать RET по-другому: для разделения длинного вывода, аналогично обычной утилите more (см. раздел 15.4 Размер экрана). Так как в такой ситуации легко нажать RET слишком много раз, GDB блокирует повтор после любой команды, генерирующей такой тип вывода.

Любой текст, расположенный от # до конца строки является комментарием; он ничего не делает. В основном, это полезно в командных файлах (см. раздел 16.3 Командные файлы).

3.2 Завершение команд

GDB может дополнить за вас окончание слова в команде, если существует только один вариант; он также может в любой момент показать, какие завершения возможны для следующего слова в команде. Это работает для команд и подкоманд GDB, а также для имен символов в вашей программе.

Нажмите TAB в любой момент, когда захотите, чтобы GDB дополнил оставшуюся часть слова. Если существует только одна возможность, GDB дополняет слово и ждет, пока вы закончите команду (или нажмете RET, чтобы ввести ее). Например, если вы введете

(gdb) info bre TAB

GDB дополнит остаток слова `breakpoints', так как у команды info есть единственная подкоманда, начинающаяся с `bre':

(gdb) info breakpoints

Теперь вы можете нажать либо RET, чтобы выполнить команду info breakpoints, либо удалить часть символов и ввести что-то другое, если `breakpoints' не является той командой, которую вы ожидали. (Если вы с самого начала были уверены, что хотите info breakpoints, вы также могли просто нажать RET, сразу после `info bre', использовав сокращение команды вместо завершения).

Если при нажатии TAB существует несколько вариантов для следующего слова, GDB издает звук. Вы можете либо ввести больше символов и попробовать снова, либо нажать TAB второй раз; GDB выведет все возможные завершения для этого слова. Например, вы можете захотеть установить точку останова на подпрограмме, чье имя начинается с `make_', но когда вы вводите b make_TAB, GDB лишь издает звук. Повторное нажатие TAB отображает все имена функций в вашей программе, начинающиеся с этих символов. Например:

(gdb) b make_ TAB
GDB издает звук; нажав TAB еще раз, видим:
make_a_section_from_file     make_environ
make_abs_section             make_function_type
make_blockvector             make_pointer_type
make_cleanup                 make_reference_type
make_command                 make_symbol_completion_list
(gdb) b make_

После отображения возможных вариантов, GDB копирует ваш частичный ввод (`b make_' в этом примере), так что вы можете закончить команду.

Если вы сначала хотите только увидеть список альтернатив, вы можете нажать M-?, а не нажимать TAB дважды. M-? означает META ?. Вы можете ввести это либо удерживая клавишу, обозначенную на вашей клавиатуре как META (если такая есть), и нажать ?, или как ESC, за которой следует ?.

Иногда нужная вам строка, являясь логически "словом", может содержать скобки или другие символы, которые GDB обычно исключает из своего понятия о слове. Чтобы позволить завершению слов работать в такой ситуации, вы можете заключить слова в командах GDB в ' (знаки одинарных кавычек).

Наиболее вероятная ситуация, где вам это может потребоваться, это при вводе имени функции в Си++. Это происходит потому, что Си++ допускает перегрузку функций (множественные определения одной и той же функции, различающиеся типом параметров). Например, когда вы хотите установить точку останова, вам может потребоваться различать, имеете вы в виду версию name с параметром целого типа, name(int), или же версию с параметром вещественного типа, name(float). Для использования возможностей завершения слов в такой ситуации, введите одинарную кавычку ' в начале имени функции. Это предупреждает GDB, что ему может потребоваться принять во внимание больше информации, чем обычно, когда вы нажимаете TAB или M-? для запроса завершения слова:

(gdb) b 'bubble( M-?
bubble(double,double)    bubble(int,int)
(gdb) b 'bubble(

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

(gdb) b bub TAB
GDB изменяет вашу строку ввода на следующую, и издает звук:
(gdb) b 'bubble(

Вообще, GDB может определить, что кавычка нужна (и вставляет ее), если вы запрашиваете завершение перегруженного символа до того, как начали вводить список параметров.

Для большей информации о перегруженных функциях, смотрите раздел 9.4.1.3 Выражения Си++. Вы можете использовать команду set overload-resolution off для отключения распознавания перегруженных символов; смотрите раздел 9.4.1.7 Возможности GDB для Си++.

3.3 Получение справки

Используя команду help, вы всегда можете запросить информацию о командах у самого GDB.

help
h
Вы можете использовать help (сокращенно h) без параметров, для отображения короткого списка именованных классов команд:
(gdb) help
List of classes of commands:

aliases -- Aliases of other commands
breakpoints -- Making program stop at certain points
data -- Examining data
files -- Specifying and examining files
internals -- Maintenance commands
obscure -- Obscure features
running -- Running the program
stack -- Examining the stack
status -- Status inquiries
support -- Support facilities
tracepoints -- Tracing of program execution without
               stopping the program
user-defined -- User-defined commands

Type "help" followed by a class name for a list of
commands in that class.
Type "help" followed by command name for full
documentation.
Command name abbreviations are allowed if unambiguous.
(gdb)
help класс
Используя один из общих классов справки как параметр, вы можете получить список отдельных команд этого класса. Вот, например, отображение справки для класса status:
(gdb) help status
Status inquiries.

List of commands:

info -- Generic command for showing things
 about the program being debugged
show -- Generic command for showing things
 about the debugger

Type "help" followed by command name for full
documentation.
Command name abbreviations are allowed if unambiguous.
(gdb)
help команда
Если указать имя команды в качестве параметра help, GDB выведет короткую справку о том, как ей пользоваться.
apropos арг
Команда apropos арг производит поиск по регулярному выражению, заданному в арг, во всех командах GDB и их документации. Она выводит все найденные совпадения. Например:
apropos reload
приводит к:
set symbol-reloading -- Set dynamic symbol table reloading
                                 multiple times in one run
show symbol-reloading -- Show dynamic symbol table reloading
                                 multiple times in one run
complete арг
Команда complete арг перечисляет все возможные завершения для начала команды. Используйте арг для задания начала команды, которую вы хотите завершить. Например,
complete i
приводит к:
if
ignore
info
inspect
Это предназначено для использования GNU Emacs.

В дополнение к help, вы можете использовать команды GDB info и show для получения информации о состоянии вашей программы, или о состоянии самого GDB. Каждая команда поддерживает много тем запросов; это руководство описывает каждую тему в соответствующем месте. Списки в разделах info и show в Алфавитном указателе указывают на все подкоманды. См. раздел Алфавитный указатель.

info
Эта команда (сокращенно i) предназначена для описания состояния вашей программы. Например, вы можете с помощью info args просмотреть аргументы, переданные вашей программе, с помощью info registers перечислить используемые в настоящий момент регистры, или используя info breakpoints вывести установленные вами точки останова. Вы можете получить полный список подкоманд команды info с помощью help info.
set
Вы можете присвоить переменной среды результат выражения с помощью set. Например, вы можете установить приглашение GDB в знак $ используя set prompt $.
show
В отличие от info, команда show предназначена для описания состояния самого GDB. Вы можете изменить почти все, что показывает show, используя соответствующую команду set. Например, командой set radix вы можете задать, какую систему счисления использовать для вывода, или просто узнать, какая система используется в данный момент с помощью команды show radix. Для отображения всех устанавливаемых параметров и их текущих значений, вы можете использовать show без аргументов; также можно использовать info set. Обе команды приводят к одинаковому результату.

Вот три разнообразные подкоманды show, которые не имеют соответствующих set-команд:

show version
Показывает, какая версия GDB запущена. Вам следует включать эту информацию в отчеты об ошибках в GDB. Если вы используете несколько версий GDB, вам может потребоваться определить, какая из них запущена; по мере развития отладчика появляются новые команды, а старые могут исчезнуть. Кроме того, многие распространители операционных систем поставляют модифицированные версии GDB, также существуют модифицированные версии GDB в GNU/Linux. Номер версии--это номер, появляющийся при старте.
show copying
Выводит информацию о правах на распространение GDB.
show warranty
Отображает заявление GNU об отсутствии гарантий, или гарантии, если ваша версия GDB поставляется с гарантиями.


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