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

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

Жанры

Основы программирования в Linux
Шрифт:

(gdb)

Отладчик gdb сохраняет результаты выполнения команд в псевдопеременных вида

$<номер>
. Результат последней команды всегда хранится в псевдопеременной
$
, а предыдущей — в
$$
. Это позволяет результат одной команды использовать в другой. Например:

(gdb) print j

$3 = 4

(gdb) print a[$-1].key

$4 = 1

Вывод

листинга программы

Вы можете в программе gdb вывести на экран исходный текст программы с помощью команды

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

(gdb) list

18 /* 18 */ int s = 1;

19 /* 19 */

20 /* 20 */ for(; i < n && s != 0; i++) {

21 /* 21 */ s = 0;

22 /* 22 */ for(j = 0; j < n; j++) {

23 /* 23 */ if(a[j].key > a[j+1].key) {

24 /* 24 */ item t = a[j];

25 /* 25 */ a[j] = a[j+1];

26 /* 26 */ a[j+1] = t;

27 /* 27 */ s++;

(gdb)

В строке 22 задано выполнение цикла до тех пор, пока переменная

j
меньше
n
. В данном случае
n
равна 5, поэтому у
j
будет последнее значение 4, слишком большое. Значение 4 приводит к сравнению
а[4]
с
а[5]
и возможной их перестановке. Единственное решение этой конкретной проблемы — исправить условие завершения цикла на следующее:
j < n-1
.

Давайте внесем это изменение, назовем новую программу debug4.c, откомпилируем ее и попробуем снова выполнить.

/* 22 */ for(j = 0; j < n-1; j++) {

$ cc -g -o debug4 debug4.с

$ ./debug4

array[0] = {john, 2}

array[1] = {alex, 1}

array[2] = {bill, 3}

array[3] = {neil, 4}

array[4] = {rick, 5}

Программа все еще не работает, поскольку она вывела неверно отсортированный список. Попробуем применить gdb для пошагового выполнения программы.

Установка

точек останова

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

В функции

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

Для установки точек останова применяется ряд команд. Их перечень получен отладчиком gdb с помощью команды

help breakpoint
:

(gdb) help breakpoint

Making program stop at certain points.

List of commands:

awatch -- Set a watchpoint for an expression

break -- Set breakpoint at specified line or function

catch -- Set catchpoints to catch events

clear -- Clear breakpoint at specified line or function

commands -- Set commands to be executed when a breakpoint is hit

condition -- Specify breakpoint number N to break only if COND is true

delete -- Delete some breakpoints or auto-display expressions

delete breakpoints -- Delete some breakpoints or auto-display expressions

delete checkpoint -- Delete a fork/checkpoint (experimental)

delete mem -- Delete memory region

delete tracepoints -- Delete specified tracepoints

disable -- Disable some breakpoints

disable breakpoints -- Disable some breakpoints

disable display -- Disable some expressions to be displayed when program stops

disable mem -- Disable memory region

disable tracepoints -- Disable specified tracepoints

enable -- Enable some breakpoints

enable delete -- Enable breakpoints and delete when hit

enable display -- Enable some expressions to be displayed when program stops

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

Эльфийские камни Шаннары

Брукс Терри
2. Шаннара
Фантастика:
фэнтези
7.91
рейтинг книги
Эльфийские камни Шаннары

Затерявшийся. Дилогия

Мельнюшкин Вадим
Затерявшийся
Фантастика:
попаданцы
альтернативная история
6.93
рейтинг книги
Затерявшийся. Дилогия

Контртеррор

Валериев Игорь
6. Ермак
Фантастика:
альтернативная история
5.00
рейтинг книги
Контртеррор

Газлайтер. Том 15

Володин Григорий Григорьевич
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
5.75
рейтинг книги
Газлайтер. Том 15

Пастырь Добрый

Фомин Сергей Владимирович
Религия и эзотерика:
религия
православие
христианство
5.00
рейтинг книги
Пастырь Добрый

Колодец пророков

Козлов Юрий Вильямович
Детективы:
триллеры
6.25
рейтинг книги
Колодец пророков

В поисках христиан и пряностей

Клифф Найджел
Страницы истории
Научно-образовательная:
история
5.00
рейтинг книги
В поисках христиан и пряностей

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Студент из прошлого тысячелетия

Шерас

Стародубцев Дмитрий
Фантастика:
фэнтези
6.25
рейтинг книги
Шерас

Полное собрание сочинений в одной книге

Зощенко Михаил Михайлович
Проза:
классическая проза
русская классическая проза
советская классическая проза
6.25
рейтинг книги
Полное собрание сочинений в одной книге

Хроники странного королевства. Двойной след (Дилогия)

Панкеева Оксана Петровна
79. В одном томе
Фантастика:
фэнтези
9.29
рейтинг книги
Хроники странного королевства. Двойной след (Дилогия)

Дитя прибоя

Трофимов Ерофей
Дитя прибоя
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.25
рейтинг книги
Дитя прибоя

Разгон

Загребельный Павел Архипович
Проза:
современная проза
5.00
рейтинг книги
Разгон

Бояръ-Аниме. Газлайтер. Том 35

Володин Григорий Григорьевич
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
6.40
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35