Основы программирования в Linux
Шрифт:
Сам по себе отладчик gdb — приложение, выполняющееся в текстовом режиме, но он предоставляет несколько сокращенных клавишных команд для выполнения повторяющихся задач. Во многих версиях есть редактирование в командной строке с хронологией команд, так что вы можете прокрутить список назад и выполнить ту же команду снова (попробуйте воспользоваться клавишами перемещения курсора). Все версии отладчика поддерживают "пустую команду"; нажатие клавиши <Enter> выполняет последнюю команду еще раз. Это особенно удобно при проверке выполнения программы в построчном режиме с помощью команд
Для завершения работы gdb применяйте команду
Выполнение программы
Выполнить программу можно с помощью команды
Предположим, что ваша система, как и системы обоих авторов, теперь генерирует сообщение о нарушении сегментации памяти. Если нет, читайте дальше. Вы узнаете, что делать, когда одна из ваших программ действительно сгенерирует сообщение о нарушении сегментации. Если вы не получили такого сообщения, но хотите поработать с этим примером во время чтения книги, когда первая из проблем, связанных с доступом к памяти, будет устранена, можно взять программу из файла debug4.c.
Программа, как и прежде, выполняется неверно. Когда программа дает сбой, gdb указывает причину и местонахождение. Теперь вы можете выяснять первопричину проблемы.
В зависимости от ядра вашей системы, версий библиотеки С и компилятора сбой программы может произойти в другом месте, например в строке 25, когда элементы массива меняются местами, а не в строке 23, когда сравниваются поля
Вы все равно можете продолжать следить за примером сеанса работы gdb, который описывается далее.
Трассировка стека
Программа была остановлена при выполнении функции
Увидеть, как вы добрались до этого места, можно с помощью команды
Это очень простая программа и трассировка у нее короткая, т.к. вы не вызывали много функций из других функций. Вы только видите, что
У команды
Просмотр переменных
Отладчик вывел данные в момент остановки программы, и в трассировке стека показаны значения аргументов функции.
Функция
Сбойная строка 23 — сравнение одного элемента массива с другим:
Отладчик можно применять для просмотра содержимого параметров функции, локальных переменных и глобальных данных. Команда
Вы видите, что у локальной переменной
Значение переменной
У массива
Если ваша программа завершилась в строке 25, система обнаружила чтение за пределами массива, только когда взялась за перестановку элементов массива, выполнив оператор
который при
Просмотреть элементы передаваемого массива можно, применив выражение в команде
Экспансия (сборник)
Шедевры отечественной фантастики
Фантастика:
научная фантастика
рейтинг книги
Аврора Горелика (сборник)
Поэзия:
драматургия
рейтинг книги
Наследие Маозари
1. Наследие Маозари
Фантастика:
рпг
попаданцы
аниме
рейтинг книги
Ермак. Регент
10. Ермак
Фантастика:
попаданцы
альтернативная история
рейтинг книги
Исправленному верить (сборник)
Фантастика:
научная фантастика
рейтинг книги
Черный маг императора
1. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
рейтинг книги
Средневековая история. Тетралогия
Средневековая история
Фантастика:
фэнтези
попаданцы
рейтинг книги
Вечная Война. Книга II
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
рейтинг книги
Кодекс Охотника XXXI
31. Кодекс Охотника
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги
Тринадцатый IV
4. Видящий смерть
Фантастика:
боевая фантастика
попаданцы
рейтинг книги
Тигриный лог
Детективы:
прочие детективы
рейтинг книги
Старый, но крепкий 2
2. Культивация без насилия
Фантастика:
рпг
уся
эпическая фантастика
рейтинг книги
Законы исчезновения
8. Хроники XXXIII миров
Фантастика:
научная фантастика
космическая фантастика
детективная фантастика
рейтинг книги
Посланник
2. Страж
Фантастика:
научная фантастика
космическая фантастика
рейтинг книги