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.