GNU Debugger służy do debugowania programu, analizowania awarii lub sprawdzania, co program robi w określonym momencie. Został opracowany przez Projekt GNU w latach 80. i był jednym z najczęściej używanych debugerów wiersza poleceń, a także jednym z najpopularniejszych programów GNU.
Napiszmy najpierw mały program w C, który następnie będziemy debugować. Aby rozpocząć, utwórz nowy .C
plik za pomocą krzepkość
lub dowolny wybrany przez Ciebie redaktor:
vim test.c
Utwórz następujący program w C:
#include int main() { int i = 5; pływak f = 5,5 i = i + 3; f = f + 2,2; printf("Wartość i oraz f to: %d oraz %f\n", i, f); zwróć 0; }
naciskać Ucieczka
aby przejść do trybu poleceń vima. Następnie wpisz :wq
aby zapisać program i wyjść.
Skompiluj i sprawdź, czy program działa:
gcc test.c -o test ./test Wartości i oraz f wynoszą: 8 i 7.70000
Aby włączyć obsługę debugowania w programie, kompilujemy to z -g
flaga. Jeśli flaga nie jest używana, użytkownik może nadal debugować program, aczkolwiek z ograniczonymi opcjami.
gcc test.c -g -o test
Aby rozpocząć debugowanie nasz plik wykonywalny test
w gdb
, biegniemy:
test gdb
Otworzy gdb
konsola, na której możesz wpisać gdb
polecenia. Aby zobaczyć listę poleceń, użyj Wsparcie
Komenda.
$(gdb) help Lista klas poleceń: aliasy -- Aliasy innych poleceń punkty przerwania -- Zatrzymywanie programu w określonych punktach danych -- Badanie plików danych -- Określanie i sprawdzanie wewnętrznych plików -- Niejasne polecenia konserwacji -- Niejasne funkcje uruchomione -- Uruchamianie stosu programów -- Badanie stanu stosu -- Obsługa zapytań o status -- Wsparcie techniczne punkty śledzenia -- Śledzenie wykonywania programu bez zatrzymywania programu zdefiniowane przez użytkownika -- Polecenia zdefiniowane przez użytkownika Wpisz „help”, a następnie nazwę klasy dla listy poleceń w tej klasie. Wpisz "help all" dla listy wszystkich poleceń. Wpisz „help”, a następnie nazwę polecenia, aby uzyskać pełną dokumentację. Wpisz „apropos word”, aby wyszukać polecenia związane z „word”. Skróty nazw poleceń są dozwolone, jeśli są jednoznaczne.
Następnie możesz wpisać pomoc nazwa_klasy
aby zobaczyć polecenia należące do tej klasy. Aby wyszukiwać polecenia za pomocą podciągu, użyj a propos podciąg
.
Aby ustawić punkt przerwania, gdy program wchodzi do funkcji, uruchomić:
$(gdb) przerwa główna
Tutaj ustawiamy punkt przerwania przy jedynej funkcji w naszym kodzie, tj. Główny
. Użyj polecenia uruchomić
aby wykonać program do następnego punktu przerwania lub do wyjścia.
Uruchom $(gdb)
Aby ustawić punkt przerwania w określonej lokalizacji w funkcji, posługiwać się:
przerwa *główna + 4
To ustawi punkt przerwania w czwartym wierszu funkcji main.
Ale już, przejść przez przepływ programu do następnej linii kodu, po prostu uruchom krok
Komenda.
$(gdb) krok 5: float f = 5,5;
Aby wyświetlić zawartość zmiennej, uruchomić wyświetlacz
.
$(gdb) wyświetl i 6: i = 5
Aby zmodyfikować zawartość zmiennej, które mogą być wymagane do analizy uruchomienia programu pod określonymi wartościami zmiennej, run ustaw zmienną =Wyrażenie
.
$(gdb) ustaw zmienną i=10 $(gdb) wyświetl i 7: i = 10
Tutaj „Wyrażenie” może być dowolnym prawidłowym wyrażeniem (arytmetycznym / logicznym). Dla uproszczenia po prostu przypisujemy kolejną wartość (10) do zmiennej i
.
Aby wydrukować kod montażowy programu, użyj polecenia rozmontuj nazwę funkcji
:
Użyj tylko demontować
aby wydrukować kod asemblera dla całego programu. Zwróć uwagę na strzałkę w określonym wierszu w kodzie zespołu. Oznacza to, że sesja debugowania jest obecnie wstrzymana w tej konkretnej lokalizacji pamięci (tj. w tym wierszu kodu).
Aby przeskoczyć debuger w określonym wierszu kodu, uruchomić:
$(gdb) skok *main + 2 Kontynuacja na 0x400528. Punkt przerwania 2, 0x000000000040052a w main () w test.c:3 3 int main() { 1: i = 2: f = 3: h = (unieważnione *) 0x0 4: main = {int ()} 0x400526 5: i =
Spowoduje to, że debugger przeskoczy do lokalizacji pamięci drugiego wiersza kodu w funkcji Główny
. Zauważ, że tutaj przeskoczyłem od początku głównej do bezpośrednio drugiej lokalizacji. Stąd zmienna i
nigdy nie był ustawiony, co powoduje, że debugger zgłasza błąd, że nie może uzyskać dostępu do zawartości pamięci pod adresem zmiennej i
.
Oto niektóre z podstawowych poleceń, które mogą pomóc w rozpoczęciu debugowania pliku wykonywalnego w systemie Linux. Mamy nadzieję, że informacje na tej stronie okażą się pomocne.