Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по программированию.pdf
Скачиваний:
44
Добавлен:
28.03.2015
Размер:
207.84 Кб
Скачать

4. Отладчик gdb

Программа отладчик используется для исправления ошибок пропущенных программистом и компилятором или исправление которых невозможно в момент написания кода программы и компиляции. Входящий в комплект программ GNU отладчик называется GDB. Версия для ОС Windows поставляется отдельно от набора MinGW и требует дополнительной установки.

Для того, чтобы пользоваться отладчиком, нужно сначала скомпилировать программу так, чтобы её двоичный файл содержал отладочную информацию. Эта информация включает в себя, в частности, описание соответствий между адресами исполняемого кода и строками в исходном коде.

Такая компиляция достигается путём добавления флага -g, например:

g++ main.cpp foo.cpp -o HelloWorld -g

Если используется команда make, то необходимо поставить опцию CFLAGS=-g. В этом случае все команды на компиляцию, содержащиеся в Make-файле, автоматически получат флаг -g.

make CFLAGS=-g

Другой способ добавить отладочную информацию исправить Makefile добавив ко всем строкам отвечающим за компиляцию опцию -g.

При запуске отладчика указывается файл для отладки.

gdb ./HelloWorld

Приведем пояснения к основным командам управления отладчиком. Запуск программы внутри отладчика, производится после запуска отладчика командой run.

run

После этой команды начинается выполнение программы до первой точки остановки. Точка остановки это метка, указывающая файл

15

с исходным кодом и номер строки, на которой отладчик остановит выполнение программы. Для просмотра исходного кода девяти первых строк главного файла программы используется команда list.

list

Для указания конкретных строк, например с третьей строки по шестую файла main.cpp используется команда

list 4,6

или

list main.cpp:4,6

Таким же образом можно посмотреть содержимое других исходных файлов, например:

list foo.h:1,6

Для установки точки останова (breakpoint) используется команда break. Например, установка точки останова в файле main.cpp в седьмой строке производится командами:

list main.cpp:1,9

break 7

Выполнение первой команды делает активным файл main.cpp и позволяет просмотреть строки в которых будет установлена точка останова. Вторая команда непосредственно создает точку останова. Кроме того, для указания точки останова можно использовать название функции, перед входом в которую требуется установить точку останова.

Осуществить просмотр установленных точек останова производится командой info breakpoints.

info breakpoints

После запуска программы и остановки на точки останова, можно узнать где именно произошла остановка, для этого используется команда backtrace.

backtrace

16

Отладчик выдаст информацию о функции, в которой произошла остановка, имени файла и номере строки с исходным кодом. Функция backtrace показывает весь стек функций, поэтому будут отражаться все названия функций от текущего места вплоть до main.

Для просмотра значения любой переменной используется команда print.

print message

Для отображения значения конкретной переменной на каждой точке остановки, используется команда display.

display message

Продолжение выполнения программы после останова производится командой continue.

continue

Выполнение команды run после точки останова, приведет к перезапуску выполнения программы.

Для изменения значения во время выполнения используется команда set.

set message=0x000000

Осторожно! message это указатель на класс, его обнуление приводит к неверному выполнению программы, а в некоторых случаях к краху программы или системы. Данная команда, примененная к указателю приведена исключительно для первокурсников с целью научить их экспериментировать и не боятся нарушать правила в пределах разумного.

Удаление точек останова производится командой delete с порядковым номером точки останова.

delete 1

Команда удаляет первую точку останова.

Для пошагового выполнения программы используется команда step. Её также можно вызывать одной буквой s. Для её использования

17

необходимо установить точку останова и запустить программу командой run, после остановки выполнения на точки останова вводится команда step.

step

или

s

Если требуется пошаговое выполнение программы в пределах одной функции, используется команда next.

next

или

n

Если после входа в функцию необходимо прекратить пошаговое выполнение в её пределах, используется команда finish.

finish

Таким образом можно покинуть продолжительную функцию, если отладка не затрагивает её содержимое.

Список наиболее часто встречающихся команд отладчика приведен в приложении 2.

18