logo

GDB (wprowadzenie krok po kroku)

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>
bez imienia

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.

zakończ_gdb

Do wyjścia

Skompiluj kod

Poniżej znajduje się program, który wykazuje niezdefiniowane zachowanie po skompilowaniu przy użyciu C99. lista-1



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.

punkt przerwania

Wyświetl kod

Ustaw punkt przerwania

Wprowadźmy punkt przerwania, powiedzmy linia 5.

informacja_b

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łączyć

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.

włącz-1

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.

pierwszy bieg

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.

print_value_x

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.