GDB - Definiowanie nowych poleceń złożonych z już istniejących
Dziś artykuł na temat dostosowywania debuggera GDB do własnych potrzeb. Spróbujemy zdefiniować nowe polecenie opierające się na kilku istniejących, co w pewnych warunkach powinno ułatwić i znacznie przyśpieszyć proces pracy nad odrobaczaniem kodu.
Po co tworzyć złożone polecenia?
Definiowanie własnych poleceń, które będą tak naprawdę sekwencją już istniejących, tyle że zgrupowanych w pewien kompleks noszący nową nazwę, może mieć szereg zastosowań. Tutaj akurat posłużymy się prostym przykładem, w którym będziemy mieli ustawiony punkt wstrzymania (break point) wewnątrz jakiejś pętli. Wyobraźmy sobie, że zadaniem tej pętli jest rekurencyjnie zmieniać wartości pewnych zmiennych. Załóżmy również, że obliczenia przeprowadzane na tych zmiennych nie przebiegają poprawnie i chcemy prześledzić jak ich wartości zmieniają się wraz kolejnymi wykonaniami pętli. Schemat procesu debugowania może wyglądać następująco:- Debugger zatrzymuje się w pętli (break point)
- Wyświetlamy wartość pierwszej zmiennej
- Wyświetlamy wartość drugiej zmiennej
- Wyświetlamy wartość trzeciej zmiennej
- Kontynuujemy działanie programu (przeskakujemy do punktu pierwszego schematu)
print zmienna1
print zmienna2
print zmienna3
continue
# debugger znowu się zatrzymuje...
Jak definiować nowe, złożone polecenia?
Definiowanie nowych poleceń jest niezwykle proste. Wystarczy w konsoli DBG wpisać polecenia na kształt:<kolejne polecenia>
end
print zmienna1
print zmienna2
print zmienna3
continue
end
Jak zdefiniować polecenie na stałe?
Powyższa metoda dobra jest do doraźnego odrobaczania, ponieważ zdefiniowane polecenie przestanie być dostępne po ponownym uruchomieniu DBG. Jeżeli jednak chcemy zdefiniować komendę, dostępną przy każdym uruchomieniu debuggera, to musimy umieścić ją w pliku ~/.gdbinit (plik .gdbinit znajdujący się w katalogu głównym użytkownika). Zawartość tego pliku zostanie wykonana przy każdym włączeniu programu DGB. Jeśli ten plik nie istnieje w naszym systemie, to bez przeszkód możemy go utworzyć. Definicja komendy zapisana w tym pliku powinna wyglądać dokładnie tak samo jak miało to miejsce przy wpisywaniu jej do programu. Zadbajmy jedynie o czytelność tego pliku w postaci odpowiedniej tabulacji. Treść pliku .gdbinit może wyglądać następująco:print zmienna1
print zmienna2
print zmienna3
end
echo "Zdefiniowano nowe polecenie - nextOne!"
Komentarze (0) - Nikt jeszcze nie komentował - bądź pierwszy!