Введение
Отладка программ — важная часть разработки ПО. GDB (GNU Debugger) — это мощный инструмент, который позволяет вам пошагово исполнять код, проверять значения переменных и анализировать стек вызовов. Это руководство познакомит вас с основами GDB на Linux, чтобы вы могли быстро выявлять ошибки без лишних затрат времени.
Требования
- Дистрибутив Linux (Ubuntu 22.04 LTS, Debian 12, Fedora 38 и аналогичные).
- Компоновщик
gccи текстовый редактор (например,vim,nano). - Права на установку программ (
sudo).
Пошаговая инструкция
Шаг 1: Установка GDB
- Обновите список пакетов (
sudo apt updateилиsudo dnf update). - Установите GDB:
# Ubuntu / Debian sudo apt install gdb # Fedora / CentOS sudo dnf install gdb - Проверьте установку:
gdb --version
Шаг 2: Настройка отладочного сеанса
- Создайте тестовый файл
hello.cс простым кодом, содержащим ошибку (например, деление на ноль). - Скомпилируйте программу с отладочной информацией:
gcc -g hello.c -o hello - Запустите GDB:
gdb ./hello - Установите точку остановки на функции
main:break main - Запустите программу:
run
Шаг 3: Выполнение отладки
| Команда | Значение |
|---|---|
continue (или c) | Возобновить выполнение до следующей точки остановки. |
step (или s) | Перейти к следующему выражению внутри функции. |
next (или n) | Перейти к следующей строке, пропуская вызовы функций. |
print variable | Вывести значение переменной. |
bt | Показать стек вызовов. |
info locals | Перечислить локальные переменные текущей функции. |
Пример использования: после запуска программы вы достигнете точки остановки в main. Нажмите continue, чтобы исполнить код до ошибки. Как только программа зависнет, выполните bt, чтобы увидеть, где возникла проблема.
Шаг 4: Анализ результата и исправление ошибки
- Проверьте значения переменных с помощью
print, напримерprint division_result. - Используйте
display var, чтобы автоматически отслеживать изменения переменной во время отладки. - Для отслеживания изменений в памяти используйте
watch var. - Сохраните сеанс отладки:
source gdb_session.txt
Это удобно для повторного анализа той же ошибки.
Проверка результата
- Успешная отладка: Вы можете проследить выполнение кода, увидеть значения переменных и получить читаемый стек вызовов при возникновении ошибки.
- Неправильная отладка: Если команда
btне показывает никаких данных, убедитесь, что программа выполняется под GDB (проверьтеinfo procв случае программ на Си с multithreading). - Дополнительная проверка: Запустите
info files, чтобы убедиться, что отлаживаемый бинарный файл соответствует исходному коду.
Возможные проблемы
- Программа выходит за пределы памяти или зависает сразу после запуска – добавьте флаг
-gпри компиляции и убедитесь, что вы запустили именно отлаживаемый бинарный файл (./hello). Используйтеinfo proc mappings, чтобы проверить адресацию памяти. - Точка остановки не срабатывает – проверьте имя функции; GDB чувствителен к регистру. Используйте
info breakpoints, чтобы увидеть все текущие точки остановки. - Отсутствие отладочной информации – выполните
file hello, убедитесь, что бинарный файл скомпилирован с-g. Если нет, перекомпилируйте программу. - Сигналы segfault – после получения сигнала выполните
btиinfo threads, чтобы увидеть, какой поток вызвал ошибку.
💡 Совет: Для ускорения отладки сохраняйте часто используемые команды в инициализационном файле
~/.gdbinit. Например, добавьтеset pagination offиdefine prompt \n(gdb)для более компактного интерфейса.