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 автоматически открывает соответствующий исходный файл. Не правда ли. проще разобраться в происходящем, глядя на весь файл, а не на одну его строку?
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Использование отладчика gdb
Использование отладчика gdb Для того, чтобы мельком заглянуть внутрь работающего ядра можно использовать стандартный отладчик GNU. Запуск отладчика для работы с ядром почти ни чем не отличается от отладки выполняющегося процесса.gdb vmlinux /proc/kcoreФайл vmlinux — это
Активизация отладчика
Активизация отладчика Активизировать отладчик при работе со сценариями можно несколькими способами.Во-первых, внутри JScript- или VBScript-сценариев можно вставить специальные операторы (debugger для JScript и Stop для VBScript) и выполнить сценарий с параметром //D. Для примера рассмотрим
Команды отладчика
Команды отладчика Команды, имеющиеся в Microsoft Script Debugger, позволяют выполнять трассировку сценариев, просматривать список вызванных процедур или функций, анализировать и изменять значения
Запуск программ
Запуск программ Существует несколько способов запуска приложений. Все они, за исключением одного, использовались и в предыдущих версиях Windows. Новый вариант – запуск программ с использованием строки поиска меню Пуск. Зная название программы, достаточно набрать в строке
5.6. Нормальный запуск
5.6. Нормальный запуск Наш небольшой пример использования TCP (около 150 строк кода для двух функций main, str_echo, str_cli, readline и writen) позволяет понять, как запускаются и завершаются клиент и сервер и, что наиболее важно, как развиваются события, если произошел сбой на узле клиента или
Запуск программы
Запуск программы Мы запустили клиент и сервер на разных компьютерах с FreeBSD, между которыми был установлен настраиваемый маршрутизатор (рис. 10.4). Маршрутизатор может создавать задержку и сбрасывать часть пакетов. Сначала мы запускаем программу без сброса пакетов на
Запуск KDC
Запуск KDC К этому моменту компоненты Kerberos настроены и могут быть запущены. Для запуска сервером можно использовать способы, описанные в главе 4. Если пакет Kerberos поставлялся вместе с вашей системой, для вероятно, существует сценарий запуска SysV. Сценарий для KDC обычно
Запуск rlogind
Запуск rlogind Сервер rlogind обычно запускается посредством суперсервера. Во многих дистрибутивных пакетах в конфигурационном файле /etc/inetd.conf уже присутствует запись для rlogind, но чаще всего она закомментирована. Для того, чтобы сервер выполнялся на компьютере, вам надо убрать
Запуск SWAT
Запуск SWAT Функции сервера SWAT реализованы в программе swat. Для ее запуска может быть использован любой из способов, описанных в главе 4, но чаще всего swat запускается посредством суперсервера. Соответствующая запись в файле /etc/inetd.conf имеет следующий вид:swat stream tcp nowait.400 root
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Затем появится надпись «Не
Запуск isql
Запуск isql Есть несколько различных способов соединения с базой данных при использовании isql. Один способ- стартовать утилиту из командной строки в интерактивном режиме. Для начала в окне командной строки перейдите к каталогу /bin корневого каталога инсталляции Firebird, где
Запуск
Запуск Нет ничего проще, чем запустить программу Internet Explorer. Вы можете запустить ее одним из способов:1) двойной щелчок по значку который находится на рабочем столе;2) щелкнуть по значку размещенном на панели быстрого запуска 3) нажать кнопку Пуск и выбрать строчку Internet