DEBUGGER GNU lub GDB potężne narzędzie do debugowania kodu źródłowego dla programów Linux

DEBUGGER GNU lub GDB potężne narzędzie do debugowania kodu źródłowego dla programów Linux

Debugger odgrywa istotną rolę w dowolnym systemie tworzenia oprogramowania. Nikt nie może napisać kodu wolnego od błędów jednocześnie. W trakcie rozwoju błędy są hodowane i należy je rozwiązać w celu dalszego ulepszenia. System rozwoju jest niekompletny bez debuggera. Biorąc pod uwagę społeczność programistów open source, GNU Debugger jest ich najlepszym wyborem. Służy również do tworzenia oprogramowania komercyjnego na platformach typu unix.

Debugowanie kodu źródłowego z debuggerem GNU

DEBUGGER GNU, znany również jako GDB, pozwala nam przebić kod podczas jego wykonywania lub co program próbował zrobić w momencie, gdy się rozbije. GDB w zasadzie pomaga nam zrobić cztery główne rzeczy, aby złapać wady w kodzie źródłowym.

  1. Rozpocznij program, określając argumenty, które mogą wpływać na ogólne zachowanie.
  2. Zatrzymaj program w określonych warunkach.
  3. Zbadaj wypadek lub po zatrzymaniu programu.
  4. Zmień kod i natychmiastowo eksperymentuj ze zmodyfikowanym kodem.

Możemy użyć GDB do debugowania programów napisanych C i C ++ bez większego wysiłku. Na razie obsługę innych języków programowania, takich jak D, MODULA-2, FORTRAN są częściowe.

Pierwsze kroki z debuggerem GNU lub GDB

GDB jest wywoływany za pomocą GDB Komenda. Po wydaniu GDB, Wyświetla kilka informacji o platformie i wpada do (GDB) Monituj, jak pokazano poniżej.

[[e -mail chroniony] ~]# gdb
Przykładowy wyjście
GNU GDB (GDB) Fedora 7.6.50.20130731-19.FC20 Copyright (C) 2013 Free Software Foundation, Inc. Licencja GPLV3+: GNU GPL Wersja 3 lub nowsza To jest bezpłatne oprogramowanie: możesz je zmienić i redystrybuować. Nie ma gwarancji, w jakim stopniu dozwolonym przez prawo. Wpisz „Pokaż kopiowanie” i „Pokaż gwarancję”, aby uzyskać szczegółowe informacje. Ten GDB został skonfigurowany jako „x86_64-Redhat-Linux-gnu”. Wpisz „Pokaż konfigurację” dla szczegółów konfiguracji. Instrukcje zgłaszania błędów można znaleźć: . Znajdź instrukcję obsługi GDB i inne zasoby dokumentacji online pod adresem: . Aby uzyskać pomoc, wpisz „Pomoc”. Wpisz „słowo apropos”, aby wyszukać polecenia związane z „słowem”. (GDB)

Typ pomoc Lista do wykrywania różnych klas poleceń dostępnych w GDB. Typ pomoc a następnie nazwa klasy dla listy poleceń w tej klasie. Typ Pomóż wszystkim dla listy wszystkich poleceń. Nazwa polecenia Skróty są dozwolone, jeśli są jednoznaczne. Na przykład możesz wpisać N zamiast pisać Następny Lub C Do Kontynuować i tak dalej.

Najczęściej używane polecenia GDB

Powszechnie używane Polecenia GDB są wymienione w poniższej tabeli. Te polecenia należy używać z wiersza polecenia GDB (GDB).

Komenda Opis
uruchomić Rozpocznij wykonanie programu
zrezygnować Oprócz GDB
Wydrukuj expr Wyrażenie wydruku gdzie Expr może też być zmienną nazwą
Następny Przejdź do następnej linii
krok Przejdź do następnej linii
Kontynuować Kontynuuj od bieżącej linii do końca programu lub następnego punktu przerwy

Zwróć uwagę na różnicę między dwoma poleceniami krok I Następny. Następny Polecenie nie wchodzi wewnątrz funkcji, jeśli następny wiersz jest wywołanie funkcji. Mając na uwadze, że krok Polecenie może wejść do funkcji wewnątrz i zobaczyć, co się tam dzieje.

Przykładowa sesja z GDB

Rozważ następujący kod źródłowy.

// suma.c #include int sum (int a, int b) int c; c = a + b; zwrot c;  int main () int x, y, z; printf („\ nenter pierwszy numer:”); Scanf („%d” i x); printf („wprowadź drugą liczbę:”); Scanf („%D” i y); Z = suma (x, y); printf („suma to %d \ n \ n”, z); powrót 0; 

Aby debugować plik wyjściowy, musimy skompilować to samo -G opcja GCC następująco.

$ gcc -g sum.C -O suma

Plik wyjściowy suma można dołączyć do GDB na jeden z następujących 2 sposobów:

1. Określając plik wyjściowy jako argument do GDB.

$ gdb suma

2. Uruchamianie pliku wyjściowego w GDB za pomocą plik Komenda.

$ GDB (GDB) Suma

lista Polecenie wymienia wiersze w pliku kodu źródłowego i przesuwa wskaźnik. Więc pierwszy lista wyświetli pierwsze 10 linii i następne lista Wyświetla następne 10 i tak dalej.

(gdb) lista 1 #include 2 3 int sum (int a, int b) 4 int c; 5 c = a + b; 6 zwrot c; 7 8 9 int main () 10 int x, y, z;

Aby rozpocząć wykonanie, wydać uruchomić Komenda. Teraz program jest wykonywany normalnie. Ale zapomnieliśmy umieścić pewne punkty przerwania w kodzie źródłowym do debugowania, prawda? Te punkty przerwania można określić dla funkcji lub w określonych liniach.

(GDB) B Main

Notatka: Użyłem skrótu B Do przerwa.

Po ustawieniu punktu przerwania w funkcji głównej, czyń program zatrzyma się w wierszu 11. To samo można wprowadzić w życie, jeśli numer linii jest znany wcześniej.

(gdb) b suma.C: 11

Teraz przejdź przez linie kodu za pomocą Następny Lub N Komenda. To ważne by zauważyć że Następny Polecenie nie przechodzi w kod funkcji, chyba że w funkcji ustawiony jest punkt przerwania. Wypróbujmy wydrukować polecenie teraz. Ustaw punkt przerwy na suma funkcji jak poniżej.

(GDB) B SUM PUNKPUTER 1 AT 0X4005AA: SUM PLIK.C, linia 5. (GDB) r.C: 5 5 C = A + B; (GDB) P A 1 USD = 2 (GDB) P B $ 2 = 3 (GDB) C. Suma wynosi 5 [gorszy 1 (proces 3444) opuścił normalnie]

Jeśli uruchomiony program wymaga parametrów wiersza poleceń, podaj to samo wraz z uruchomić polecenie jako.

(GDB) Uruchom… 

Udostępnione pliki biblioteczne powiązane z bieżącym programem uruchomionym można wymienić jako.

(GDB) Udostępnij informację od Syms Read Shared Obiekt Biblioteka 0x00000035a6000b10 0x000035a6019c70 TAK /Lib64 /LD-Linux-X86-64.Więc.2 0x00000035a641f560 0x00000035a6560bb4 tak /lib64 /libc.Więc.6

Zmienne modyfikujące

GDB jest również w stanie modyfikować zmienne w trakcie wykonywania programu. Wypróbujmy to. Jak wspomniano powyżej Ustaw punkt przerwania w wierszu 16 i uruchom program.

(GDB) r.C: 16 16 Printf („Suma to %d \ n \ n”, z); (GDB) Ustaw Z = 4 (GDB) C Kontynuowanie. Suma to 4

Teraz a = 1, B = 2 i wynik powinien być Z = 3. Ale tutaj zmieniliśmy końcowy wynik na Z = 4 w głównej funkcji. W ten sposób debugowanie może być łatwiejsze za pomocą GDB.

Włącz/wyłącz punkty przerwania

Aby uzyskać listę wszystkich typów punktów przerwania Punkty przerwania informacji.

(GDB) Info Punkty przerwania Nump Typ Disp Enb.C: 11

Tutaj jest tylko jeden punkt przerwy i to jest. włączone wyłącz punkty przerwania Określ numer punktu przerwania wraz z wyłączyć Komenda. Aby włączyć następnie użyć włączać Komenda.

(GDB) Wyłącz 1 (GDB) Punkty przerwania Informacje Nump Typ Disp Enb.C: 11

Możesz także usunąć punkty przerwania usuwać Komenda.

Debugowanie procesów uruchamiania

Wiele procesów działa w tle w systemie GNU/Linux. Aby przede wszystkim debugować proces działający, aby znaleźć identyfikator procesu tego konkretnego procesu. Pidof Polecenie daje PID procesu.

$ pidof 

Teraz musimy przymocować ten PID do GDB. Istnieją 2 sposoby.

1. Określając PID wraz z GDB.

$ gdb -p 

2. Za pomocą przytwierdzać Polecenie z GDB.

(GDB) Załącz 

To wszystko na teraz. Są to tylko podstawy GDB, aby uzyskać dobry start w debugowaniu kodu źródłowego i jest to znacznie więcej niż rzeczy wyjaśnione powyżej. Na przykład możemy debugować za pomocą informacji o stosie, zmiennych środowiskowych i dużo więcej. Spróbuj się bawić z tymi wszystkimi rzeczami…