GDB oznacza GNU Project Debugger i jest potężnym narzędziem do debugowania języka C (wraz z innymi językami, takimi jak C++). Pomaga ci przeglądać programy w C podczas ich wykonywania, a także pozwala zobaczyć, co dokładnie dzieje się, gdy program się zawiesza. GDB działa na plikach wykonywalnych, które są plikami binarnymi generowanymi w procesie kompilacji.
W celach demonstracyjnych poniższy przykład jest wykonywany na komputerze z systemem Linux o poniższych specyfikacjach.
uname -a>

nazwa -a
Uczmy się, robiąc: –
Uruchom GDB
Przejdź do wiersza poleceń systemu Linux i wpisz gdb.
gdb>
gdb
Hasext Java
Monit otwarcia Gdb informuje, że jest gotowy na polecenia. Aby wyjść z gdb, wpisz Quit lub q.

Do wyjścia
Skompiluj kod
Poniżej znajduje się program, który wykazuje niezdefiniowane zachowanie po skompilowaniu przy użyciu C99.
Notatka: Jeśli obiekt, który ma automatyczny czas przechowywania, nie został jawnie zainicjowany, jego wartość jest nieokreślona, gdzie nieokreślona wartość jest albo wartością nieokreśloną, albo reprezentacją pułapki.
Teraz skompiluj kod. (tutaj test.c). flaga g oznacza, że możesz zobaczyć właściwe nazwy zmiennych i funkcji w ramkach stosu, uzyskać numery linii i zobaczyć źródło podczas poruszania się po pliku wykonywalnym. -std=flaga C99 oznacza użycie standardu C99 do kompilacji kodu. -o flaga zapisuje dane wyjściowe kompilacji do pliku wyjściowego.
gcc -std=c99 -g -o test test.C>
gcc -std=c99 -g -o test test.C
Uruchom GDB z wygenerowanym plikiem wykonywalnym
Wpisz następujące polecenie, aby uruchomić GDB ze skompilowanym plikiem wykonywalnym.
gdb ./test>
gdb./test
Przydatne polecenia GDB:
Oto kilka przydatnych poleceń ułatwiających rozpoczęcie pracy z GDB.
Komenda | Opis |
---|---|
biegnij lub r | Wykonuje program od początku do końca. |
przerwać lub b | Ustawia punkt przerwania w określonej linii. |
wyłączyć | Wyłącza punkt przerwania |
włączać | Włącza wyłączony punkt przerwania. |
następny lub n | Wykonuje następny wiersz kodu bez zagłębiania się w funkcje. |
krok | Przechodzi do następnej instrukcji, zagłębiając się w funkcję. |
lista lub l | Wyświetla kod. |
wydrukuj lub s | Wyświetla wartość zmiennej. |
zrezygnuj lub q | Wychodzi z GDB. |
jasne | Usuwa wszystkie punkty przerwania. |
Kontynuować | Kontynuuje normalne wykonywanie |
Wyświetl kod
Teraz wpisz l w wierszu polecenia gdb, aby wyświetlić kod.

Wyświetl kod
Ustaw punkt przerwania
Wprowadźmy punkt przerwania, powiedzmy linia 5.

Ustaw punkt przerwania
Jeśli chcesz umieścić punkt przerwania w różnych wierszach, możesz wpisać b numer kolejki .Domyślnie lista lub l wyświetla tylko pierwsze 10 linii.
Wyświetl punkty przerwania
Aby zobaczyć punkty przerwania, wpisz info b.

Wyświetl punkty przerwania
Wyłącz punkt przerwania
Po wykonaniu powyższych czynności załóżmy, że zmieniłeś zdanie i chcesz wrócić. Wpisz wyłącz b.

Wyłącz punkt przerwania
Włącz ponownie wyłączony punkt przerwania
Jak zaznaczono w niebieskim kółku, Enb zmienia się na n dla osób niepełnosprawnych. 9. Aby ponownie włączyć ostatnio wyłączony punkt przerwania. Wpisz włącz b.

Włącz ponownie wyłączony punkt przerwania
Uruchom kod
Uruchom kod, wpisując run lub r. Jeśli nie ustawiłeś żadnych punktów przerwania, polecenie run po prostu wykona cały program.

Uruchom kod
czy android może grać w gamepigeon
Wydrukuj wartości zmiennych
Aby zobaczyć wartość zmiennej, wpisz print nazwa_zmiennej lub str nazwa_zmiennej .

Wydrukuj wartości zmiennych
Powyższe pokazuje wartości przechowywane w x w momencie wykonania.
Zmień wartości zmiennych
Aby zmienić wartość zmiennej w gdb i kontynuować wykonywanie ze zmienioną wartością, wpisz set nazwa_zmiennej .
Debugowanie danych wyjściowych
Poniższy zrzut ekranu pokazuje wartości zmiennych, z których całkiem zrozumiały jest powód, dla którego jako wynik otrzymaliśmy wartość śmieciową. Przy każdym wykonaniu . /test otrzymamy inny wynik.
Ćwiczenie: Spróbuj przy pierwszym uruchomieniu użyć set x = 0 w gdb i zobacz wynik c.
Debugowanie danych wyjściowych
GDB oferuje wiele innych sposobów debugowania i zrozumienia kodu, takich jak sprawdzanie stosu, pamięci, wątków, manipulowanie programem itp. Mam nadzieję, że powyższy przykład pomoże Ci rozpocząć pracę z gdb.
Wniosek
W tym artykule omówiliśmy GDB (GNU Debugger), który jest potężnym narzędziem w systemie Linux używanym do debugowania programów w języku C. Omówiliśmy niektóre z poniższych kroków, abyśmy mogli skompilować kod z informacjami debugowania, uruchomić GDB, ustawić punkt przerwania, sprawdzić zmienne i przeanalizować zachowanie programu. Omówiliśmy także funkcje GDB, takie jak badanie kodu, zarządzanie punktami przerwań, manipulowanie zmiennymi i kontrola wykonywania programu, które pozwalają nam efektywnie debugować i rozwiązywać problemy.