Перейти к содержанию

Последнее обновление:2026-10-12

Отладка программ на C++ с помощью GDB

Когда вы отлаживаете C-код с помощью GNU Debugger (GDB), вы обнаружите, что это самый популярный отладчик в UNIX-системах, применяемый для отладки программ на C и C++. Ниже — простое и понятное объяснение отладки C-кода с помощью GDB:

Прежде всего, в командной строке перейдите в текущую папку с кодом и выполните следующую команду:

gcc -g -Wall code.c -o output

Здесь опция -g необходима для работы с GDB. Опция -Wall используется для показа предупреждений. Будет создан исполняемый файл с именем «output».

Затем выполните следующую команду, чтобы открыть сеанс GDB и получить символьную информацию из файла output (или, проще говоря, настроить всё окружение для отладки code.c):

gdb output

Следующие команды помогут вам в отладке:

  • list: вывести исходный код.
  • b x: поставить точку останова в позиции x. x может быть именем модуля или номером строки. Например, x может быть именем функции вроде main.
  • r: выполнить программу (до точки останова) и выдать результат. То есть запустить код до точки останова и сгенерировать результат. [если есть аргументы, то r аргумент1 аргумент2 аргумент3 ...]
  • info breakpoints x: выдать подробную информацию о точке останова x.
  • info breakpoints: выдать подробную информацию обо всех точках останова.
  • delete x: удалить точку останова x.
  • disable x и enable x: отключить и включить точку останова x.
  • print p: напечатать значение переменной p.
  • display p: показывать значение переменной p после каждого запуска (автоматизирует весь процесс).
  • c: продолжить выполнение программы (пропустить итерации цикла for и т.п.). Используйте c-iter1, чтобы пропустить первую итерацию, снова введите c, чтобы пропустить вторую, и так далее.
  • Можно также использовать дополнительные условия, например b x if (y > m), что означает: поставить точку останова на строке x, если значение y больше m.
  • GDB также умеет ставить точки останова в нескольких файлах. Например, если в program.c вызывается функция из function.c, можно командой b function.c:x поставить точку останова на строке x в function.c.
  • bt: используется для трассировки пути выполнения кода. bt выдаёт индексированный список, показывающий пройденные кодом процессы. Например: #0 — описание процесса 0, #1 — описание процесса 1 и так далее, где 0 — самый недавний процесс.
  • Ввод f x переносит к процессу x (f 0 — к процессу 0) и выдаёт значения переменных на момент выполнения соответствующей функции.
  • s: используется для входа в функцию и получения более подробной информации.
  • next: используется для построчного выполнения кода.

Похожие темы

Комментарии