Чтение онлайн

на главную - закладки

Жанры

Linux программирование в примерах
Шрифт:

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.

Type "show copying" to see the conditions.

There is absolutely no warranty for GDB. Type "show warranty" for details.

This GDB was configured as "i686-pc-linux-gnu"...

Core was generated by 'ch15-abort'.

Program terminated with signal 6, Aborted.

Reading symbols from /lib/i686/libc.so.6...done.

Loaded symbols for /lib/i686/libc.so.6

Reading symbols from /lib/ld-linux.so.2...done.

Loaded symbols for /lib/ld-linux.so.2

#0 0x42028ccl in kill from /lib/i686/libc.so.6

(gdb) where /*
Вывести трассировку стека */

#0 0x42028cc1 in kill from /lib/i686/libc.so.6

#1 0x42028ac8 in raise from /lib/i686/libc.so.6

#2 0x4202a019 in abort from /lib/1686/libc.so.6

#3 0x08048342 in recurse at ch15-abort.c:13

 /* <-- Нам нужно исследовать здесь */

#4 0x08048347 in recurse at ch15-abort.с:15

#5 0x08048347 in recurse at ch15-abort.c:15

#6 0x0804835f in main (argc=1, argv=0xbffff8f4) at ch15-abort.c:20

#7 0x420158d4 in __libc_start_main from /lib/i686/libc.so.6

Команда

where
выводит трассировку стека, то есть список всех вызванных функций, начиная с самых недавних. Обратите внимание, что имеется три вызова функции
recurse
. Команда
bt
, означающая 'back trace' (обратная трассировка), является другим названием для
where
; ее легче набирать.

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

frame
GDB дает вам возможность исследовать определенный фрейм. В данном случае нам нужен фрейм 3. Это последний вызов
recurse
, который вызвал
abort
:

(gdb) frame 3 /* Переместиться в фрейм 3 */

#3 0x08048342 in recurse at ch15-abort.с:13

13 abort; /* GDB выводит в фрейме положение в исходном коде */

(gdb) list /* Показать несколько строк исходного кода */

8 void recurse(void)

9 {

10 static int i;

11

12 if (++i == 3)

13 abort;

14 else

15 recurse;

16 }

17

(gdb) /*
Нажатие ENTER повторяет последнюю команду */

18 int main(int argc, char **argv)

19 {

20 recurse;

21 }

(gdb) quit /* Выйти из отладчика (пока) */

Как показано, нажатие ENTER повторяет последнюю команду, в данном случае

list
, для отображения строк исходного кода. Это простой способ прохождения исходного кода.

Для редактирования командной строки GDB использует библиотеку

readline
, поэтому для повторения и редактирования ранее введенных команд можно использовать команды Emacs или
vi
. Оболочка Bash использует ту же самую библиотеку, поэтому если вам более знакомо редактирование командной строки в приглашении оболочки, GDB работает таким же образом. Эта особенность дает возможность избежать утомительного ручного ввода.

15.3.2. Установка контрольных точек, пошаговое выполнение и отслеживаемые точки

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

– g
), все, что может сообщить GDB, это имя функции, но больше никаких деталей.

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

Контрольная точка (breakpoint) является точкой, в которой исполнение должно прерваться, остановиться. Контрольные точки можно установить по имени функции, номеру строки исходного файла, файлу исходного файла совместно с номером строки, а также другими способами.

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

run
, за которой могут следовать аргументы командной строки, которые должны быть переданы отлаживаемой программе. (GDB удобным образом запоминает за вас аргументы; если нужно снова запустить программу с начала, все что нужно — это напечатать лишь саму команду
run
, и GDB запустит новую копию с теми же аргументами, как и ранее). Вот короткий сеанс с использованием
gawk
:

Поделиться:
Популярные книги

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.25
рейтинг книги
Здравствуй, 1985-й

Идеальный мир для Лекаря 16

Сапфир Олег
16. Лекарь
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 16

Кодекс Охотника. Книга VII

Винокуров Юрий
7. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.75
рейтинг книги
Кодекс Охотника. Книга VII

Назад в СССР: 1984

Гаусс Максим
1. Спасти ЧАЭС
Фантастика:
попаданцы
альтернативная история
4.80
рейтинг книги
Назад в СССР: 1984

Как я строил магическую империю

Зубов Константин
1. Как я строил магическую империю
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Как я строил магическую империю

Дядя самых честных правил 8

Горбов Александр Михайлович
8. Дядя самых честных правил
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Дядя самых честных правил 8

Попаданка в академии драконов 4

Свадьбина Любовь
4. Попаданка в академии драконов
Любовные романы:
любовно-фантастические романы
7.47
рейтинг книги
Попаданка в академии драконов 4

Стеллар. Трибут

Прокофьев Роман Юрьевич
2. Стеллар
Фантастика:
боевая фантастика
рпг
8.75
рейтинг книги
Стеллар. Трибут

6 Секретов мисс Недотроги

Суббота Светлана
2. Мисс Недотрога
Любовные романы:
любовно-фантастические романы
эро литература
7.34
рейтинг книги
6 Секретов мисс Недотроги

Лорд Системы 11

Токсик Саша
11. Лорд Системы
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Лорд Системы 11

Золотая осень 1977

Арх Максим
3. Регрессор в СССР
Фантастика:
альтернативная история
7.36
рейтинг книги
Золотая осень 1977

Я не князь. Книга XIII

Дрейк Сириус
13. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я не князь. Книга XIII

Моя (не) на одну ночь. Бесконтрактная любовь

Тоцка Тала
4. Шикарные Аверины
Любовные романы:
современные любовные романы
7.70
рейтинг книги
Моя (не) на одну ночь. Бесконтрактная любовь

Раб и солдат

Greko
1. Штык и кинжал
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Раб и солдат