Как и его предшественники, GDB является отладчиком командной строки. Он выводит по одной строке исходного кода за раз, выдает приглашение и читает одну строку ввода, содержащего команду для исполнения.
Имеются графические отладчики; они предоставляют больший обзор исходного кода и обычно предоставляют возможность манипулировать программой как из окна командной строки, так и через компоненты GUI, такие, как кнопки и меню. Отладчик ddd
[163] является одним из таких; он построен поверх GDB, так что если вы изучите GDB, вы сразу же сможете начать использовать ddd
. (У ddd
есть собственное руководство, которое следует прочесть, если вы собираетесь интенсивно его использовать.) Другим графическим отладчиком является Insight[164], который использует для предоставления поверх GDB графического интерфейса Tcl/Tk. (Следует использовать графический отладчик, если он доступен и нравится вам. Поскольку мы собираемся предоставить введение в отладчики и отладку, мы выбрали использование простого интерфейса, который можно представить в напечатанном виде.)
GDB понимает С и С++, включая поддержку *ptr->x.a[1]->q
'. Он понимает также Fortran 77, хотя вам может понадобиться добавить к имени функции или переменной Фортрана символ подчеркивания GDB также частично поддерживает Modula-2 и имеет ограниченную поддержку Паскаля.
Если вы работаете на системе GNU/Linux или BSD (и установили средства разработки), у вас, вероятно, уже установлена готовая к использованию последняя версия GDB. Если нет, исходный код GDB можно загрузить с FTP-сайта проекта GNU для GDB[165] и самостоятельно его построить.
GDB поставляется с собственным руководством, которое занимает 300 страниц. В каталоге исходного кода GDB можно сгенерировать печатную версию руководства и самостоятельно его распечатать. Можно также купить в Free Software Foundation (FSF) готовые печатные экземпляры; ваша покупка поможет FSF и непосредственно внесет вклад в производство большего количества свободного программного обеспечения. (Информацию для заказа см. на веб-сайте FSF)[166]. Данный раздел описывает лишь основы GDB; мы рекомендуем прочесть руководство, чтобы научиться использовать все преимущества возможностей GDB.
15.3.1. Запуск GDB
Основное использование следующее:
gdb [
Здесь core
, созданном при завершении программы операционной системой с созданием снимка процесса. Под GNU/Linux такие файлы (по умолчанию) называются core.
[167], где
является ID процесса запущенной программы, которая была завершена. Расширение
означает, что в одном каталоге могут находиться несколько дампов ядра, что бывает полезно, но также занимает дисковое пространство!
Если вы забыли указать в командной строке имена файлов, для сообщения GDB имени исполняемого файла можно использовать 'file
', а для имени файла дампа — 'core-file
'.
При наличии дампа ядра GDB указывает место завершения программы. Следующая программа, ch15-abort.c
, делает несколько вложенных вызовов функций, а затем намеренно завершается посредством abort()
, чтобы создать дамп ядра:
/* ch15-abort.c --- создает дамп ядра */
#include
#include
/* recurse --- создание нескольких вызовов функций */
void recurse(void)
{
static int i;
if (++i == 3)
abort();
else
recurse();
}
int main(int argc, char **argv)
{
recurse();
}
Вот небольшой сеанс GDB с этой программой:
$ gcc -g ch15-abort.c -o ch15-abort /* Компилировать без -O */
$ ch15-abort /* Запустить программу */
Aborted (core dumped) /* Она печально завершается */
$ gdb ch15-abort core.4124 /* Запустить для нее GDB */
GNU gdb 5.3
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU
General Public License, and you are
welcome to change it and/or distribute copies of it
under certain conditions.