Книга: Основы программирования в Linux

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

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

Вы можете в программе 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 для пошагового выполнения программы.

Оглавление книги


Генерация: 1.608. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз