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

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

Жанры

Основы программирования в 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

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

Аврора Горелика (сборник)

Аксенов Василий Павлович
Поэзия:
драматургия
6.25
рейтинг книги
Аврора Горелика (сборник)

12 великих комедий

Шекспир Уильям
Вожди Советского Союза
Проза:
классическая проза
6.25
рейтинг книги
12 великих комедий

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

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

Маркс и Энгельс

Серебрякова Галина Иосифовна
421. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Маркс и Энгельс

Охотник за головами

Вайс Александр
1. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Охотник за головами

Последний Паладин. Том 3

Саваровский Роман
3. Путь Паладина
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 3

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Лунный бассейн. Металлическое чудовище (сборник)

Меррит Абрахам Грэйс
2. Абрахам Меррит. Собрание сочинений в 5 томах
Фантастика:
ужасы и мистика
5.00
рейтинг книги
Лунный бассейн. Металлическое чудовище (сборник)

С чего все началось?

Katelyn
Любовные романы:
современные любовные романы
3.40
рейтинг книги
С чего все началось?

Дважды одарённый. Том IX

Тарс Элиан
9. Дважды одаренный
Фантастика:
альтернативная история
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Дважды одарённый. Том IX

Отряд

Посняков Андрей
Отряд тайных дел
Фантастика:
фэнтези
боевая фантастика
6.25
рейтинг книги
Отряд

Шайтан Иван 5

Тен Эдуард
5. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
5.50
рейтинг книги
Шайтан Иван 5

Америго Веспуччи. Фернан Магеллан

Цвейг Стефан
Проза:
историческая проза
5.00
рейтинг книги
Америго Веспуччи. Фернан Магеллан

Неучтенный элемент. Том 7

NikL
7. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 7