GDB - programy do debugowania
Pierwsze kroki: uruchamianie i zatrzymywanie
gcc -g myprogram.c
Kompiluje myprogram.c z opcją debugowania (-g). Nadal otrzymujesz plik a.out, ale zawiera on informacje o debugowaniu, które pozwalają na używanie zmiennych i nazw funkcji wewnątrz GDB zamiast surowych lokalizacji pamięci (nie jest to zabawne).
gdb a.out
Otwiera GDB z plikiem a.out, ale nie uruchamia programu. Zobaczysz znak zachęty (gdb) - wszystkie przykłady pochodzą z tego znaku zachęty.
r
r arg1 arg2
r <plik1
Trzy sposoby uruchomienia „a.out”, załadowane wcześniej. Możesz uruchomić go bezpośrednio (r), przekazać argumenty (r arg1 arg2) lub przesłać do pliku. Zazwyczaj przed uruchomieniem ustawiasz punkty przerwania.
help
h punktów przerwania
Wyświetla listę tematów pomocy (pomoc) lub uzyskuje pomoc na określony temat (punkty przerwania h). GDB jest dobrze udokumentowany.
q - Zamknij GDB
Przechodzenie przez kod
Stepping pozwala prześledzić ścieżkę programu i skupić się na kodzie, który ulega awarii lub zwraca nieprawidłowe dane wejściowe.
l
l 50
Moja funkcja
Wyświetla 10 wierszy kodu źródłowego dla bieżącego wiersza (l), określonego wiersza (l 50) lub funkcji (l moja funkcja).
Kolejny
Uruchamia program do następnej linii, a następnie zatrzymuje się. Jeśli bieżąca linia jest funkcją, wykonuje całą funkcję, a następnie zatrzymuje się.next jest dobry do szybkiego przechodzenia przez kod.
krok
Uruchamia następną instrukcję, a nie wiersz. Jeśli bieżąca instrukcja ustawia zmienną, jest taka sama jaknext. Jeśli jest to funkcja, wskoczy do niej, wykona pierwszą instrukcję, a następnie zatrzyma się.step jest dobry do zagłębiania się w szczegóły kodu.
koniec
Kończy wykonywanie bieżącej funkcji, a następnie wstrzymuje (nazywane również wyjściem). Przydatne, jeśli przypadkowo wszedłeś do funkcji.
Punkty przerwania lub punkty obserwacyjne
Punkty przerwania odgrywają ważną rolę w debugowaniu. Wstrzymują (przerywają) program, gdy osiąga określony punkt. Możesz sprawdzać i zmieniać zmienne oraz wznowić wykonywanie. Jest to pomocne, gdy wystąpi awaria wejścia lub wejścia mają być testowane.
przerwa 45
złamać moją funkcję
- Ustawia punkt przerwania w linii 45 lub w mojej funkcji. Program zatrzyma się, gdy osiągnie punkt przerwania.
zegarek x == 3
Ustawia punkt obserwacyjny, który wstrzymuje program, gdy zmienia się warunek (gdy zmienia się x == 3). Punkty obserwacyjne są świetne dla niektórych danych wejściowych (myPtr! = NULL) bez konieczności przerywania każdego wywołania funkcji.
kontyntynuj
Wznawia wykonywanie po wstrzymaniu przez punkt przerwania / obserwacyjny. Program będzie kontynuowany, dopóki nie osiągnie następnego punktu przerwania / obserwacyjnego.
usuń N
- Usuwa punkt przerwania N (punkty przerwania są numerowane podczas tworzenia).
Ustawianie zmiennych
Przeglądanie i zmienianie zmiennych w czasie wykonywania jest krytyczną częścią debugowania. Spróbuj podać nieprawidłowe dane wejściowe do funkcji lub uruchomić inne przypadki testowe, aby znaleźć główną przyczynę problemów. Zazwyczaj będziesz przeglądać / ustawiać zmienne, gdy program zostanie wstrzymany.
drukuj x
Wyświetla aktualną wartość zmiennej x. Możliwość używania oryginalnych nazw zmiennych jest powodem, dla którego potrzebna jest flaga (-g); programy kompilowane regularnie usuwają te informacje.
zestaw x = 3
ustaw x = y
- Ustawia x na ustawioną wartość (3) lub na inną zmienną (y)
zadzwoń do myfunction ()
zadzwoń do mojej innej funkcji (x)
zadzwoń do strlen (mystring)
Wywołuje funkcje zdefiniowane przez użytkownika lub funkcje systemowe. Jest to niezwykle przydatne, ale uważaj na wywoływanie błędnych funkcji.
wyświetlacz x
Stale wyświetla wartość zmiennej x, która jest pokazywana po każdym kroku lub pauzie. Przydatne, jeśli stale sprawdzasz określoną wartość.
undisplay x
- Usuwa stałe wyświetlanie zmiennej wyświetlanej przez polecenie wyświetlania.
Śledzenie wstecz i zmienianie ramek
Stos to lista bieżących wywołań funkcji - pokazuje, gdzie jesteś w programie. Rama przechowuje dane pojedynczego wywołania funkcji, takich jak argumenty.
bt
Backtraceslub wyświetla bieżący stos funkcji, aby pokazać, gdzie jesteś w bieżącym programie. Jeśli main wywołuje funkcję a (), która wywołuje b (), która wywołuje c (), śledzenie wstecz jest
c <= current location
b
a
main
up
na dół
Przejdź do następnej klatki w górę lub w dół na stosie funkcji. Jeśli jesteś wc, możesz się przenieść b lub a do badania zmiennych lokalnych.
powrót
- Zwraca z bieżącej funkcji.
Obsługa sygnałów
Sygnały to komunikaty generowane po pewnych zdarzeniach, takich jak licznik czasu lub błąd. GDB może wstrzymać się, gdy napotka sygnał; zamiast tego możesz je zignorować.
uchwyt [nazwa sygnału] [akcja]
uchwyt SIGUSR1 nostop
uchwyt SIGUSR1 noprint
uchwyt SIGUSR1 ignoruj
Poinstruuj GDB, aby ignorował określony sygnał (SIGUSR1), gdy wystąpi. Istnieją różne poziomy ignorowania.