1.4.2. Запуск отладчика

1.4.2. Запуск отладчика

Отладчик gdb запускается следующим образом:

% gdb reciprocal

После запуска появится строка приглашения такого вида:

(gdb)

В первую очередь необходимо запустить программу под отладчиком. Для этого введите команду run и требуемые аргументы. Попробуем вызвать программу без аргументов:

(gdb) run

Starting program: reciprocal

Program received signal SIGSEGV, Segmentation fault.

__strtol_internal (nptr=0x0, endptr=0x0, base=10, group=0)

at strtol.c:287

287  strtol.c: No such file or directory.

(gdb)

Проблема заключается в том, что в функции main() не предусмотрены средства контроля ошибок. Программа ожидает наличия аргумента, а в данном случае его нет. Получение сигнала SIGSEGV означает крах программы. Отладчик определяет, что причина краха находится в функции __strtol_internal(). Эта функция является частью стандартной библиотеки, но ее исходный файл отсутствует. Вот почему появляется сообщение "No such file or directory". С помощью команды where можно просмотреть содержимое стека:

(gdb) where

#0 __strtol_internal (nptr=0x0, endptr=0x0, base=10, group=0)

   at strtol.c:287

#1 0x40096fb6 in atoi (nptr=0x0) at ../stdlib/stdlib.h:251

#2 0x804863e in main (argc=1, argv=0xbffff5e4) at main.c:8

Как нетрудно заметить, функция main() вызвала функцию atoi(), передав ей нулевой указатель, что и стало причиной ошибки.

С помощью команды up можно подняться но стеку на два уровня, дойдя до функции main():

(gdb) up 2

#2 0x804863е in main (argc=1, argv=0xbffff5e4) at main.c:8

8    i = atoi(argv[1]);

Заметьте, что отладчик нашел исходный файл main.c и отобразил строку, где располагается ошибочный вызов функции. Узнать значение нужной локальной переменной позволяет команда print:

(gdb) print argv[1]

$2 = 0x0

Это подтверждает нашу догадку о том, что причина ошибки — передача функции atoi() указателя NULL.

Установка контрольной точки осуществляется посредством команды break:

(gdb) break main

Breakpoint 1 at 0x804862e: file main.c, line 8.

В данном случае контрольная точка размещена в первой строке функции main(). Давайте теперь заново запустим программу, передав ей один аргумент:

(gdb) run 7

Starting program: reciprocal 7

Breakpoint 1, main (argc=2, argv=0xbffff5e4) at main.c:8

8   i = atoi(argv[1]);

Как видите, отладчик остановился на контрольной точке- Перейти на следующую строку можно с помощью команды next:

(gdb) next

9    printf("The reciprocal of %d is %g ", i,

reciprocal(i));

Если требуется узнать, что происходит внутри функции reciprocal(), воспользуйтесь командой step:

(gdb) step

reciprocal (i=7) at reciprocal.cpp:6

6    assert(i != 0);

Иногда удобнее запускать отладчик gdb непосредственно из редактора Emacs, а не из командной строки. Для этого следует ввести в редакторе команду M-x gdb. Когда отладчик останавливается в контрольной точке, редактор Emacs автоматически открывает соответствующий исходный файл. Не правда ли. проще разобраться в происходящем, глядя на весь файл, а не на одну его строку?

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Запуск программ

Из книги Windows Vista автора Вавилов Сергей

Запуск программ Существует несколько способов запуска приложений. Все они, за исключением одного, использовались и в предыдущих версиях Windows. Новый вариант – запуск программ с использованием строки поиска меню Пуск. Зная название программы, достаточно набрать в строке


Активизация отладчика

Из книги Windows Script Host для Windows 2000/XP автора Попов Андрей Владимирович

Активизация отладчика Активизировать отладчик при работе со сценариями можно несколькими способами.Во-первых, внутри JScript- или VBScript-сценариев можно вставить специальные операторы (debugger для JScript и Stop для VBScript) и выполнить сценарий с параметром //D. Для примера рассмотрим


Команды отладчика

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

Команды отладчика Команды, имеющиеся в Microsoft Script Debugger, позволяют выполнять трассировку сценариев, просматривать список вызванных процедур или функций, анализировать и изменять значения


Запуск KDC

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Запуск KDC К этому моменту компоненты Kerberos настроены и могут быть запущены. Для запуска сервером можно использовать способы, описанные в главе 4. Если пакет Kerberos поставлялся вместе с вашей системой, для вероятно, существует сценарий запуска SysV. Сценарий для KDC обычно


Запуск rlogind

Из книги Linux программирование в примерах автора Роббинс Арнольд

Запуск rlogind Сервер rlogind обычно запускается посредством суперсервера. Во многих дистрибутивных пакетах в конфигурационном файле /etc/inetd.conf уже присутствует запись для rlogind, но чаще всего она закомментирована. Для того, чтобы сервер выполнялся на компьютере, вам надо убрать


Запуск сервера VNC

Из книги Флибуста. Обратная сторона [Инструкции по установке и запуску i2p, TOR и VPN для «чайников». v. 1.1] автора Коллектив авторов


Запуск SWAT

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Запуск SWAT Функции сервера SWAT реализованы в программе swat. Для ее запуска может быть использован любой из способов, описанных в главе 4, но чаще всего swat запускается посредством суперсервера. Соответствующая запись в файле /etc/inetd.conf имеет следующий вид:swat stream tcp nowait.400 root


Запуск isql

Из книги Разработка ядра Linux автора Лав Роберт

Запуск isql Есть несколько различных способов соединения с базой данных при использовании isql. Один способ- стартовать утилиту из командной строки в интерактивном режиме. Для начала в окне командной строки перейдите к каталогу /bin корневого каталога инсталляции Firebird, где


15.3.1. Запуск GDB

Из книги Как приручить компьютер за несколько часов автора Ремнева Ирина


2. Запуск

Из книги автора

2. Запуск 2.1.После завершения распаковки архива, в выбранной папке (в моем случае TOR) связка распакуется в директорию C: PRIVATПРОГРАММЫTORTor Browser Рис. 11 Рис. 11Переходим в нее (1)Можно сразу запустить исполняемый файл Start Tor Browser.exe (2), но лучше создать ярлычок для


4. Запуск i2P

Из книги автора

4. Запуск i2P Запускаем ярлык-«человечка» Start i2p (no window) (1)над треем появится серый прямоугольник (2) Рис. 78В адресной строке браузера набираем http://127.0.0.1:7657/console Рис. 79Когда вы запустите i2p у вас некоторое время не будет локальных туннелей Рис. 80Затем появится надпись «Не


5.6. Нормальный запуск

Из книги автора

5.6. Нормальный запуск Наш небольшой пример использования TCP (около 150 строк кода для двух функций main, str_echo, str_cli, readline и writen) позволяет понять, как запускаются и завершаются клиент и сервер и, что наиболее важно, как развиваются события, если произошел сбой на узле клиента или


Запуск программы

Из книги автора

Запуск программы Мы запустили клиент и сервер на разных компьютерах с FreeBSD, между которыми был установлен настраиваемый маршрутизатор (рис. 10.4). Маршрутизатор может создавать задержку и сбрасывать часть пакетов. Сначала мы запускаем программу без сброса пакетов на


Использование отладчика gdb

Из книги автора

Использование отладчика gdb Для того, чтобы мельком заглянуть внутрь работающего ядра можно использовать стандартный отладчик GNU. Запуск отладчика для работы с ядром почти ни чем не отличается от отладки выполняющегося процесса.gdb vmlinux /proc/kcoreФайл vmlinux — это


Запуск

Из книги автора

Запуск Нет ничего проще, чем запустить программу Internet Explorer. Вы можете запустить ее одним из способов:1) двойной щелчок по значку который находится на рабочем столе;2) щелкнуть по значку размещенном на панели быстрого запуска 3) нажать кнопку Пуск и выбрать строчку Internet