Книга: Основы программирования в 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 для пошагового выполнения программы.
- 28.3. Вывод на символьном сокете
- ВЫВОД СТРОК
- Выполнение программы
- Вывод
- СТРУКТУРА ПРОСТОЙ ПРОГРАММЫ
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- Включение и отключение синхронного вывода
- 1.2.5. Пример программы
- 24.7. Использование программы-твикера
- 2. Правила вывода Армстронга
- 3. Производные правила вывода
- 1.6 Драйверы и буферы ввода-вывода