Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Autor: Piotr Szawdyński
Biblioteki C++

Konfiguracja GDB

[lekcja] Rozdział 3. Niniejszy rozdział koncentruje się na konfiguracji aplikacji GDB tak, aby było możliwe śledzenie błędów dla aplikacji debugowanych zdalnie jak i lokalnie.

Wprowadzenie

Po uruchomieniu aplikacji gdb możliwe jest wydawanie poleceń związanych z konfiguracją debuggera jak i poleceń umożliwiających śledzenie kodu. Niniejszy rozdział będzie poświęcony podstawowym poleceniom konfiguracyjnym, które umożliwią Ci debugowanie aplikacji uruchamianych na urządzeniu zdalnym i być może pomogą Ci rozwiązać ewentualne problemy związane z debugowaniem lokalnym (choć te raczej nie powinny wystąpić).

Architektura skompilowanych bibliotek

Jeżeli kompilujesz aplikację na urządzenie o innej architekturze niż ta, na której debugujesz aplikację, to będziesz potrzebował odpowiednią wersję aplikacji GDB. Przykładem debuggera, umożliwiającego określanie architektury skompilowanych plików jest aplikacja gdb-multiarch. Aplikacja ta posiada polecenie set architecture, które umożliwia określenie architektury w jakiej zostały skompilowane biblioteki oraz debugowana aplikacja. Przykładowo polecenie, które przełączy aplikację GDB w tryb debugowania aplikacji skompilowanej na procesory ARM wygląda następująco:
(gdb) set architecture arm

Uwaga!
Pamiętaj, że polecenie set architecture jest dostępne tylko i wyłącznie dla debuggera gdb-multiarch.

Katalog zawierający strukturę partycji urządzenia zdalnego

Debugując aplikację uruchomioną urządzeniu zdalnym prawie zawsze zachodzi potrzeba określenia katalogu reprezentującego strukturę partycji głównej urządzenia zdalnego. Do tego celu służy polecenie sysroot:
(gdb) set sysroot /home/nazwa_uzytkownika/jakis/katalog/pelniacy/funkcje/roota/analogicznego/do/zdalnego/urzadzenia
Po wykonaniu wspomnianego polecenia, wskazany katalog na urządzeniu lokalnym będzie traktowany przez debugger tak, jakby to był główny systemowy katalog urządzenia zdalnego. Tym samym debugger będzie wczytywał informacje np. o bibliotekach systemowych ze wskazanego katalogu.

Katalogi zawierające skompilowane biblioteki

Polecenie set solib-search-path służy do określania katalogów, w których aplikacja GDB ma poszukiwać bibliotek dynamicznych zawierających symbole debugowe. Kolejne ścieżki oddziela się znakiem dwukropka. Przykład:
(gdb) set solib-search-path /home/nazwa_uzytkownika/sciezka_do_libow_piersza:/home/nazwa_uzytkownika/sciezka_do_libow_druga

Katalog nadrzędny, zawierający kody źródłowe debugowanej aplikacji

Polecenie directory służy do określania katalogu nadrzędnego, który zawiera kod źródłowy debugowanej aplikacji. Przykład:
(gdb) directory /home/nazwa_uzytkownika/sciezka_do_nadrzednego_katalogu_z_kodami_zrodlowymi

Automatyczne wczytywanie konfiguracji z pliku

Plik .gdbinit (gdb.ini)

Aplikacja GDB umożliwia nam również automatyczne wczytywanie poleceń GDB w chwili jej uruchamiania. Służy do tego plik .gdbinit, który umieszcza się w katalogu roboczym, z którego wywołujemy polecenie uruchamiające aplikację GDB. Plik może zawierać dowolne polecenia, które obsługuje GDB. Oto przykład pliku .gdbinit:
#to jest plik .gdbinit
#komentarze w pliku .gdbinit zaczyna się od znaku #

#Ustawiamy architekturę, którą chcemy debugować (polecenie dostępne w kompilatorze gdb-multiarch)
set architecture arm

#Ustawiamy katalog, który ma 'symulować' partycję główną urządzenia, na którym znajduje się debugowana aplikacja,
set sysroot /home/nazwa_uzytkownika/wirtualna_partycja_systemowa

#Ustawiamy katalogi, które zawierają skompilowane biblioteki dla urządzenia docelowego (debugowanego)
set solib-search-path /home/nazwa_uzytkownika/projekty/biblioteki:/home/nazwa_uzytkownika/projekt/projekty/jakas_aplikacja/biblioteki

#Ustawiamy katalog, który zawiera kody źródłowe
dir /home/nazwa_uzytkownika/projekty/jakas_aplikacja/src

#Podłączamy się do zdalnego urządzenia, które jest widoczne pod adresem IP 192.168.129.3 i ma uruchomiony gdbserver na porcie 8888
target remote 192.168.129.3:8888

.gdbinit jest nazwą pliku dla systemów Unix. Debugger GDB dla systemu Windows używa pliku o nazwie gdb.ini.

Plik o dowolnej nazwie podawany przy uruchamianiu GDB

Znacznie lepszym rozwiązaniem niż plik .gdbinit jest przekazanie dodatkowego parametru do aplikacji GDB podczas jej uruchamiania. Służy do tego przełącznik -command, a bezpośrednio za nim określamy nazwę pliku z którego mają zostać wczytane polecenia w chwili uruchamiania GDB. Przykład:
gdb-multiarch -command polecenia.gdb -args plik_wykonywalny_aplikacji

Jeżeli będziesz tworzył skrypt do debugowania konkretnej aplikacji, to z pewnością docenisz przedstawioną tu możliwość przekazywania pliku z poleceniami GDB do debuggera.

Ręczne wczytywanie konfiguracji z pliku

Konfigurację da się również wczytywać ręcznie z poziomu aplikacji GDB. Służy do tego polecenie source. Przykład:
(gdb) source nazwa_pliku_konfiguracyjnego
Poprzedni dokument Następny dokument
Uruchomienie zdalnego debugowania aplikacji Podstawowe polecenia do debugowania aplikacji