Последнее обновление: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: используется для построчного выполнения кода.
Похожие темы¶
- Сборка проектов C++ с Bazel | C++那些事
- Совместная отладка Bazel и LLDB | C++那些事
- CMake: введение и практика | C++那些事
- Введение в управление пакетами Conan для C++ | C++那些事
- C++ Insights: взгляд на этап компиляции | C++那些事
- Интерактивные C++ Jupyter Notebook | C++那些事
- Преобразование C++ string в int | C++那些事
- Отладочный макрос dbg-macro для C++ | C++那些事
- Подробный разбор опций компиляции GCC | C++那些事
- Расширенная отладка с помощью GDB Python | C++那些事