Jak korzystać z debugera GNU w systemie Linux

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.