GNU Debugger используется для отладки программы, для анализа сбоев или для просмотра того, что программа делает в определенный момент. Он был разработан проектом GNU в 1980-х годах и был одним из наиболее широко используемых отладчиков командной строки, а также одним из самых популярных программ GNU.
Давайте сначала напишем небольшую программу на C, которую затем будем отлаживать. Для начала создайте новый .c
файл с использованием vim
или любой редактор по вашему выбору:
vim test.c
Создайте следующую программу на C:
# включить int main () {int i = 5; float f = 5.5 i = i + 3; f = f + 2,2; printf ("Значения i и f:% d и% f \ n", i, f); возврат 0; }
Нажмите Побег
для перехода в командный режим vim. Затем введите : wq
чтобы сохранить программу и выйти.
Скомпилируйте и посмотрите, работает ли программа:
gcc test.c -o test ./test Значения i и f: 8 и 7.700000
Чтобы включить поддержку отладки в программе, мы компилируем это с -г
флаг. Если флаг не используется, пользователь все еще может отлаживать программу, хотя и с ограниченными возможностями.
gcc test.c -g -o test
Чтобы начать отладку наш исполняемый файл контрольная работа
в GDB
, мы бегаем:
gdb тест
Это откроет GDB
консоль, где вы можете ввести GDB
команды. Чтобы увидеть список команд, используйте помощь
команда.
$ (gdb) help Список классов команд: псевдонимы - Псевдонимы других команд точки останова - Приведение программы к остановке в определенных точках данных - Изучение файлов данных - Определение и проверка внутренних файлов файлов - Команды обслуживания неясны - Скрытые функции запущены - Запуск программного стека - Проверка состояния стека - Поддержка запросов состояния - Точки трассировки средств поддержки - Отслеживание выполнения программы без остановки программы, определяемой пользователем - Пользовательские команды Введите "help", за которым следует имя класса для списка команд в этом классе. Введите «help all» для получения списка всех команд. Для получения полной документации введите «help», а затем имя команды. Введите «apropos word» для поиска команд, связанных со словом «word». Сокращения названий команд разрешены, если они однозначны.
Затем вы можете ввести help имя_класса
чтобы увидеть команды, принадлежащие этому классу. Для поиска команд по подстроке используйте по поводу подстроки
.
Чтобы установить точку останова, когда программа входит в функцию, бегать:
$ (gdb) break main
Здесь мы устанавливаем точку останова на единственной функции в нашем коде, т.е. главный
. Используйте команду бегать
выполнить программу до следующей точки останова или до выхода.
$ (gdb) запустить
Чтобы установить точку останова в определенном месте функции, использовать:
перерыв * основной + 4
Это установит точку останова в 4-й строке функции main.
В настоящее время, для перехода к следующей строке кода, просто запустите шаг
команда.
$ (gdb) шаг 5: float f = 5.5;
Чтобы отобразить содержимое переменной, бегать отображать
.
$ (gdb) display i 6: i = 5
Чтобы изменить содержимое переменной, который может потребоваться для анализа выполнения программы при определенных значениях переменной, запустить установить переменную = Выражение
.
$ (gdb) установить переменную i = 10 $ (gdb) display i 7: i = 10
Здесь «Выражение» может быть любым допустимым (арифметическим / логическим) выражением. Для простоты мы просто присвоим переменной другое значение (10). я
.
Чтобы распечатать ассемблерный код программы, использовать команду дизассемблировать имя функции
:
Используйте только разбирать
напечатать ассемблерный код для всей программы. Обратите внимание на стрелку в конкретной строке кода сборки. Это означает, что сеанс отладки в настоящее время приостановлен в этом конкретном месте памяти (то есть в этой строке кода).
Чтобы перейти от отладчика к определенной строке кода, бегать:
$ (gdb) jump * main + 2 Продолжаем на 0x400528. Точка останова 2, 0x000000000040052a в main () на test.c: 3 3 int main () {1: i = 2: f = 3: h = (void *) 0x0 4: main = {int ()} 0x400526 5: i знак равно
Это заставит отладчик прыгнуть в ячейку памяти 2-й строки кода в функции главный
. Обратите внимание, что здесь я перескочил с начала основного на второе место. Следовательно, переменная я
никогда не был установлен, что приводит к тому, что отладчик выдает ошибку, заключающуюся в том, что он не может получить доступ к содержимому памяти по адресу переменной я
.
Это некоторые из основных команд, которые могут помочь вам начать отладку исполняемого файла в Linux. Мы надеемся, что информация на этой странице окажется для вас полезной.