Linux

Как пользоваться GDB для отладки программ Linux: пошаговое руководство

В этом руководстве вы узнаете, как установить GDB, запустить отладку программы, использовать ключевые команды и интерпретировать результаты. После выполнения инструкции вы сможете эффективно диагностировать ошибки в коде на любом дистрибутиве Linux.

Обновлено 2 июля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04 LTSDebian 12Fedora 38

Введение

Отладка программ — важная часть разработки ПО. GDB (GNU Debugger) — это мощный инструмент, который позволяет вам пошагово исполнять код, проверять значения переменных и анализировать стек вызовов. Это руководство познакомит вас с основами GDB на Linux, чтобы вы могли быстро выявлять ошибки без лишних затрат времени.

Требования

  • Дистрибутив Linux (Ubuntu 22.04 LTS, Debian 12, Fedora 38 и аналогичные).
  • Компоновщик gcc и текстовый редактор (например, vim, nano).
  • Права на установку программ (sudo).

Пошаговая инструкция

Шаг 1: Установка GDB

  1. Обновите список пакетов (sudo apt update или sudo dnf update).
  2. Установите GDB:
    # Ubuntu / Debian
    sudo apt install gdb
    
    # Fedora / CentOS
    sudo dnf install gdb
    
  3. Проверьте установку:
    gdb --version
    

Шаг 2: Настройка отладочного сеанса

  1. Создайте тестовый файл hello.c с простым кодом, содержащим ошибку (например, деление на ноль).
  2. Скомпилируйте программу с отладочной информацией:
    gcc -g hello.c -o hello
    
  3. Запустите GDB:
    gdb ./hello
    
  4. Установите точку остановки на функции main:
    break main
    
  5. Запустите программу:
    run
    

Шаг 3: Выполнение отладки

КомандаЗначение
continue (или c)Возобновить выполнение до следующей точки остановки.
step (или s)Перейти к следующему выражению внутри функции.
next (или n)Перейти к следующей строке, пропуская вызовы функций.
print variableВывести значение переменной.
btПоказать стек вызовов.
info localsПеречислить локальные переменные текущей функции.

Пример использования: после запуска программы вы достигнете точки остановки в main. Нажмите continue, чтобы исполнить код до ошибки. Как только программа зависнет, выполните bt, чтобы увидеть, где возникла проблема.

Шаг 4: Анализ результата и исправление ошибки

  1. Проверьте значения переменных с помощью print, например print division_result.
  2. Используйте display var, чтобы автоматически отслеживать изменения переменной во время отладки.
  3. Для отслеживания изменений в памяти используйте watch var.
  4. Сохраните сеанс отладки:
    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) для более компактного интерфейса.

Часто задаваемые вопросы

Как установить GDB в Ubuntu или Fedora?
Почему программа зависает во время отладки?
Как просмотреть стек вызовов при возникновении ошибки?
Что делать, если отлаживаемая программа выходит за пределы памяти?

Полезное

Установка GDB
Настройка отладочного сеанса
Выполнение отладки
Анализ результата и исправление ошибки

Эта статья помогла вам решить проблему?