Использование gdb и lldb
Пошагово выполняйте программы
«Использование gdb и lldb» — бесплатный урок C++ Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения C++ Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс C++ Academy содержит 4 уроков всего.
Интерактивные отладчики
gdb (GNU) и lldb (LLVM) позволяют приостановить работающую программу, проверить значения переменных и проходить код построчно. Их команды похожи.
Компиляция с отладочной информацией
Всегда собирайте программу с -g (а лучше ещё и с -O0), чтобы отладчик мог сопоставить машинный код с исходным кодом.
g++ -g -O0 main.cpp -o app
# then
gdb ./appУстановка точек останова
Точка останова приостанавливает выполнение в выбранном месте.
- gdb:
break main.cpp:10илиbreak myFunc - lldb:
breakpoint set --file main.cpp --line 10илиb myFunc
Запуск программы
Начните выполнение с помощью run (или r). Программа остановится на первой достигнутой точке останова и будет готова к проверке.
Пошаговое выполнение кода
Основные команды пошагового выполнения (их названия одинаковы в gdb и lldb):
next/n: выполнить одну строку, не заходя в вызываемые функцииstep/s: войти в вызываемую функциюfinish: выполнять код, пока текущая функция не вернётсяcontinue/c: продолжить выполнение до следующей точки останова
Проверка переменных
Выводите значения, чтобы понять состояние программы.
- gdb:
print x,print arr[2] - lldb:
frame variableилиp x
Цель для демонстрационного сеанса
Рассмотрим эту программу: можно установить точку останова в цикле и выводить sum на каждой итерации.
#include <iostream>
int main() {
int sum = 0;
for (int i = 1; i <= 3; ++i) {
sum += i;
}
std::cout << sum << "\n";
return 0;
}Стек вызовов
Когда программа остановлена, команда backtrace (gdb) или bt (lldb) показывает цепочку вызовов функций. Используйте frame N, чтобы перейти к вызывающей функции и проверить её локальные переменные.
Точки наблюдения
Точка наблюдения останавливает программу при изменении переменной и помогает найти место, где происходят неожиданные изменения.
- gdb:
watch counter - lldb:
watchpoint set variable counter
Условные точки останова
Останавливайте выполнение только при истинности условия, чтобы не выполнять код вручную пошагово.
- gdb:
break loop.cpp:5 if i == 99 - lldb:
breakpoint set --line 5 --condition "i == 99"
Отладка сбоев
Запустите аварийно завершающуюся программу под отладчиком: при ошибке сегментации он остановится на строке, вызвавшей ошибку. Затем используйте bt, чтобы узнать, как программа туда попала. Дамп памяти также можно проанализировать позднее.
Быстрая проверка
Вспомните команды пошагового выполнения.
Повторение
Вы изучили интерактивную отладку.
- Собирайте программу с
-g -O0 - Устанавливайте точки останова, используйте
run, затемnext/step/finish - Проверяйте код с помощью
print/frame variableиbacktrace - Точки наблюдения и условные точки останова помогают находить сложные ошибки
Часто задаваемые вопросы
Урок «Использование gdb и lldb» бесплатный?
Да — полный текст урока «Использование gdb и lldb» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс C++ Academy, подпишись на CoddyKit PRO. Курс C++ Academy содержит 4 уроков всего.
Чему я научусь в уроке «Использование gdb и lldb»?
Пошагово выполняйте программы Ты практикуешь C++ Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать C++ Academy?
Предыдущий опыт не требуется. C++ Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Использование gdb и lldb»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке C++ Academy?
Да. Каждый урок C++ Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Использование gdb и lldb
- AddressSanitizer
- UBSan и TSan
- Основы Valgrind