Как использовать отладчик GNU в Linux

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. Мы надеемся, что информация на этой странице окажется для вас полезной.

Категория: Linux