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