Używanie gdb i lldb
Wykonuj programy krok po kroku
Używanie gdb i lldb to bezpłatna lekcja C++ Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej C++ Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs C++ Academy zawiera 4 lekcji w sumie.
Debugery interaktywne
gdb (GNU) i lldb (LLVM) pozwalają wstrzymać działanie programu, sprawdzić wartości zmiennych i prześledzić kod wiersz po wierszu. Ich polecenia są podobne.
Kompilowanie z informacjami debugowania
Program należy zawsze budować z opcją -g (a najlepiej także -O0), aby debugger mógł powiązać kod maszynowy z kodem źródłowym.
g++ -g -O0 main.cpp -o app
# then
gdb ./appUstawianie breakpointów
Breakpoint wstrzymuje wykonanie programu w wybranym miejscu.
- gdb:
break main.cpp:10lubbreak myFunc - lldb:
breakpoint set --file main.cpp --line 10lubb myFunc
Uruchamianie programu
Rozpocznij wykonywanie za pomocą run (lub r). Program zatrzyma się na pierwszym napotkanym breakpoincie i będzie gotowy do analizy.
Śledzenie wykonywania kodu
Podstawowe polecenia śledzenia (o takich samych nazwach w gdb i lldb):
next/n: wykonuje jeden wiersz, pomijając wywołania funkcjistep/s: wchodzi do wywoływanej funkcjifinish: wykonuje kod do momentu powrotu bieżącej funkcjicontinue/c: wznawia wykonywanie do następnego breakpointu
Sprawdzanie zmiennych
Wyświetlaj wartości, aby zrozumieć stan programu.
- gdb:
print x,print arr[2] - lldb:
frame variablelubp x
Cel przykładowej sesji
Rozważmy ten program; można ustawić breakpoint w pętli i wyświetlać sum w każdej iteracji.
#include <iostream>
int main() {
int sum = 0;
for (int i = 1; i <= 3; ++i) {
sum += i;
}
std::cout << sum << "\n";
return 0;
}Stos wywołań
Po zatrzymaniu programu polecenie backtrace (gdb) lub bt (lldb) pokazuje łańcuch wywołań funkcji. Za pomocą frame N można przełączyć się do funkcji wywołującej i sprawdzić jej zmienne lokalne.
Punkty obserwacyjne
Punkt obserwacyjny zatrzymuje program, gdy zmieni się wartość zmiennej, co pomaga znaleźć miejsce wystąpienia nieoczekiwanych modyfikacji.
- gdb:
watch counter - lldb:
watchpoint set variable counter
Warunkowe breakpointy
Program zatrzymuje się tylko wtedy, gdy warunek jest spełniony, dzięki czemu nie trzeba wykonywać kodu krok po kroku ręcznie.
- gdb:
break loop.cpp:5 if i == 99 - lldb:
breakpoint set --line 5 --condition "i == 99"
Debugowanie awarii
Uruchom program powodujący awarię pod kontrolą debuggera; w przypadku błędu segmentacji zatrzyma się on w wierszu, który go spowodował. Następnie użyj bt, aby sprawdzić, jak program dotarł do tego miejsca. Można także przeanalizować zrzut pamięci po wystąpieniu awarii.
Szybkie sprawdzenie
Przypomnij sobie polecenia śledzenia.
Podsumowanie
Poznali Państwo debugowanie interaktywne.
- Buduj z opcjami
-g -O0 - Ustawiaj breakpointy, używaj
run, a następnienext/step/finish - Sprawdzaj wartości za pomocą
print/frame variableorazbacktrace - Punkty obserwacyjne i warunkowe breakpointy pomagają wykrywać trudne błędy
Często zadawane pytania
Czy lekcja „Używanie gdb i lldb” jest bezpłatna?
Tak — pełny tekst „Używanie gdb i lldb” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu C++ Academy, przejdź na CoddyKit PRO. Kurs C++ Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Używanie gdb i lldb”?
Wykonuj programy krok po kroku Ćwiczysz C++ Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć C++ Academy?
Nie wymagamy żadnego doświadczenia. C++ Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.
Ile czasu zajmuje lekcja „Używanie gdb i lldb”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji C++ Academy?
Tak. Każda lekcja C++ Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Używanie gdb i lldb
- AddressSanitizer
- UBSan i TSan
- Podstawy Valgrind