DEBUGGER W TURBO PASCALU


„DEBUGGER W TURBO PASCALU”

WPROWADZENIE

System Turbo Pascal, począwszy od wersji 5.0, posiada wbudowany program umożliwiający umiejscawianie i usuwanie usterek w programach pascalowych. Program ten (ang. debugger) umożliwia też oddzielne wykonanie każdego wiersza programu pascalowego ze śledzeniem war­tości dowolnych zmiennych i wyrażeń oraz modyfikację wartości zmiennych.

Z umiejscawianiem i usuwaniem usterek związane są trzy opcje głównego menu systemu Turbo Pascal: Run, Debug i Break/Watch. Zawarte w tych opcjach pole­cenia dla debuggera mogą być zainicjowane w zwykły sposób, tzn. przez przesu­nięcie podświetlenia na dane polecenie (za pomocą klawiszy ↑ lub ↓) i naciś­nięcie klawisza Enter lub przez naciśnięcie klawisza z pierwszą literą danego polecenia. Oczywiście w obu przypadkach menu danej opcji musi być aktywne. Większość poleceń dla debuggera dostępna jest także z dowolnego miejsca sy­stemu Turbo Pascal przez naciśnięcie odpowiednich klawiszy.

RODZAJE BŁĘDÓW

W realizacji algorytmów w dowolnym języku programowania mogą wystąpić błę­dy trzech rodzajów:

- błędy syntaktyczne, związane ze składnią danego języka programowania, któ­re wykrywane są przez kompilator;

- błędy semantyczne, występujące podczas wykonywania programu i związane z próbą wykonania niedozwolonej operacji (np. dzielenie przez zero lub otwieranie nie istniejącego zbioru);

- błędy logiczne, powstałe wskutek błędnego zaprogramowania algorytmu. System Turbo Pascal zapewnia bardzo dobrą sygnalizację błędów syntaktycz­nych i semantycznych. Błędy logiczne w programie napisanym w języku Turbo Pascal są, podobnie jak w programach napisanych w innych językach, bardzo trudne do wykrycia i zlokalizowania. Właśnie przy tego typu błędach niezmier­nie użyteczny jest debugger, za pomocą którego można prześledzić wykonywanie poszczególnych fragmentów programu (w tym wartości przypisywane zmiennym i wyrażeniom) i w efekcie zlokalizować błąd lub błędy logiczne.

Polecenia dla debuggera

Polecenie menu Klawisz(e) Funkcja

/Debug information progra­mie źródłowym

Options/Environment F5 powiększenie lub zmniejszenie

/Zoom windows aktywnego okna systemu

debugging wewnętrz­nego

swapping podczas sesji debuggera

all watches Watch

ROZPOCZĘCIE SESJI UMIEJSCAWIANIA I USUWANIA USTEREK PROGRAMOWYCH

Przed rozpoczęciem sesji debuggera należy polecić kompilatorowi języka Turbo Pascal generowanie dla danego programu wewnętrznej tablicy symboli. Ta­blica ta jest bazą danych o wszystkich stosowanych w programie identyfikatorach (stałych, typach, zmiennych, procedurach i funkcjach) z numerami wier­szy, w których one występują. Oprócz tego wygodnie jest polecić kompilatorowi utworzenie tablic symboli lokalnych, które zawierać będą analogiczne informa­cje o identyfikatorach lokalnych w treści każdej procedury i funkcji. Oba polecenia mogą być ustanowione w menu systemu (Options/Compiler/Debug infor­mation i Options/Compiler/Local symbols) lub bezpośrednio w programie za po­mocą dyrektyw kompilatora {$D+} i {$L+). Warto zaznaczyć, że w interakcyjnym systemie Turbo Pascal polecenia te ustanowione są standardowo.

Jeśli sesja umiejscawiania i usuwania usterek ma być obsłużona przez debugger wbudowany w system Turbo Pascal, to należy upewnić się, czy parametr Integrated debugging opcji Debug jest włączony, tj. ustalony na On (przyjmo­wane jest to standardowo przez system). W przypadku, gdy sesja będzie prze­prowadzona przez debugger zewnętrzny (może nim być Turbo Debugger l.5 firmy Borland International), należy włączyć, tj. ustalić na On, parametr Stand­alone debugging, występujący w tej samej opcji (standardowo parametr ten jest wyłączony).

ŚLEDZENIE PRZEBIEGU PROGRAMU

Po zainicjowaniu sesji debuggera śledzenie wykonania programu odbywa się w sposób uzależniony od poleceń programisty. Dwa najprostsze sposoby polegają na zainicjowaniu poleceń:

Pierwsze z tych poleceń powoduje wykonanie instrukcji w bieżącym wierszu wykonawczym, zaznaczonym na ekranie przez podświetlenie. Jeśli instrukcją tą jest wywołanie procedury, to nastąpi przejście do tej procedury i ustalenie bieżącego wiersza wykonawczego na słowie kluczowym begin, rozpoczynającym treść danej procedury. W przypadku wywołania metody postępowanie jest analo­giczne.

Polecenie Step over, które może być zainicjowane z dowolnego miejsca sy­stemu Turbo Pascal przez naciśnięcie klawisza F8, powoduje także wykonanie instrukcji znajdującej się w bieżącym wierszu wykonawczym. Zasadnicza różnica pomiędzy tym poleceniem a poleceniem Trace into występuje w przypadku, gdy bieżącą instrukcją jest wywołanie procedury (metody). Nie następuje tu usta­lenie początku treści procedury (metody) jako bieżącego wiersza wykonawczego, lecz wykonanie całej procedury (metody). Po tej operacji debugger przyjmuje jako bieżącą pozycję wykonawczą instrukcję następującą po instrukcji wywoła­nia procedury (metody).

W sesji debuggera program może być wykonany tylko do określonego miejsca, a ściślej do miejsca aktualnego położenia kursora. W tym celu należy w tekś­cie programu, znajdującego się w edytorze, przesunąć w zwykły sposób kursor do określonego miejsca, po czym zainicjować polecenie Go to cursor opcji Run. Polecenie to może być zainicjowane z dowolnego miejsca systemu Turbo Pascal przez naciśnięcie klawisza F4.

USTANAWIANIE PUNKTÓW KONTROLNYCH

Podczas sesji umiejscawiania i usuwania usterek można w programie ustanowić punkty kontrolne. W punktach kontrolnych wykonywanie programu jest prze­rywane i debugger oczekuje na dalsze polecenia. Należy zaznaczyć, że punkty kontrolne ustanowione w programie istnieją tylko podczas sesji debuggera i nie są zapamiętywane w zbiorze .EXE zapisywanym na dysku.

W celu ustanowienia w programie punktu kontrolnego należy w zwykły dla trybu edycji sposób przesunąć kursor do danego miejsca programu i zainicjować polecenie Toggle breakpoint (przez wybór w opcji Break/Watch lub naciśnięcie klawiszy Ctrl-F8). Wiersz programu, ustanowiony jako punkt kontrolny, zosta­nie na ekranie podświetlony (kolorem czerwonym na ekranie monitora koloro­wego).

W programie można ustanowić do 21 punktów kontrolnych. Wiersz programu, będący takim punktem, musi przy tym zawierać przynajmniej jedną instrukcję. Punktów kontrolnych nie można zatem ustanawiać w wierszach pustych, zawiera­jących tylko komentarze, dyrektywy kompilatora deklaracje i definicje sta­łych, typów, zmiennych i etykiet oraz nagłówki programu, modułów, procedur lub funkcji. Niezastosowanie się do tej reguły powoduje wyświetlenie (w trak­cie wykonywania programu) komunikatu:

↑ Invalid Breakpoint

Ignore, Erase, Clear all bad, Skip all bad

Po wyświetleniu takiego komunikatu należy nacisnąć jeden z następujących klawiszy:

I (Ignore) - zignorowanie punktu kontrolnego,

E (Erase) - usunięcie punktu kontrolnego,

C (Clear all bad) - usunięcie wszystkich błędnych punktów kontrolnych,

S (Skip all bad) - przeskakiwanie przez wszystkie błędne punkty kontrolne.

We wszystkich przypadkach po wykonaniu podanej czynności wykonywanie progra­mu jest wznawiane.

Jeśli do okienka Watch wprowadzono jakieś zmienne lub wyrażenia, to po zatrzymaniu w punkcie kontrolnym wykonywania programu zostaną wyświetlone ich aktualne wartości.

Do usunięcia wszystkich punktów kontrolnych, ustanowionych w programie, służy polecenie Clear all breakpoints w opcji Break/Watch. Przeglądania punktów kontrolnych programu dokonuje się przez sukcesywne inicjowanie polecenia View next breakpoint (także w opcji Break/Watch), które przesuwa kursor z je­go aktualnego położenia do najbliższego, następnego punktu kontrolnego.

KONTROLOWANIE POSREDNICH WARTOSCI ZMIENNYCH, STRUKTUR DANYCH I WYRAŻEŃ

Przebieg wykonania programu może być kontrolowany przez śledzenie zmian wartości zmiennych, struktur danych i wyrażeń. Podczas wykonywania programu, możliwa jest też modyfikacja (zmiana) wartości zmiennych.

Do kontrolowania zmian wartości wspomnianych elementów służy okienko pod­glądania (okienko Watch), do którego należy wprowadzić badane zmienne, struk­tury danych i/lub wyrażenia. Operację tę przeprowadza się za pomocą polecenia Add watch, które może być zainicjowane przez odpowiedni wybór w opcji Break /Watch lub przez naciśnięcie (w dowolnym miejscu systemu Turbo Pascal) klawi­szy Ctrl-F7.

MODYFIKOWANIE WARTOŚCI ZMIENNYCH

Jednym z poleceń dostępnych w opcji Debug jest Evaluate, służące do wyświetlania aktualnych wartości zmiennych i wyrażeń oraz do modyfikowania (zmieniania) wartości zmiennych. Polecenie Evaluate może być zainicjowane przez naciśnięcie klawiszy Ctrl-F4.

W wyniku zainicjowania polecenia Evaluate na ekranie ukaże się okienko z trzema podokienkami (polami) zatytułowanymi Evaluate, Result i New value. Pierwsze pole (Evaluate) zawiera zawsze podświetlone słowo z aktualnej pozy­cji kursora w tekście znajdującym się w edytorze. Przepisanie do tego pola dalszej części tekstu uzyskuje się przez naciśnięcie klawisza →. Zawartość pola Evaluate może być redagowana w identyczny sposób jak okienka Add watch.

Po naciśnięciu klawisza Enter aktualna wartość stałej, zmiennej lub wyra­żenia, znajdującego się w polu Evaluate, zostanie wyświetlona w polu Result (wynik). Jeśli wyświetlana wartość nie mieści się w całości w tym polu, to w celu jej przesunięcia w lewo lub w prawo należy posłużyć się klawiszami Tab, , , Home lub End.

Trzecie pole, New value (nowa wartość), służy do modyfikowania (zmieniania) wartości zmiennej wprowadzonej w polu Evaluate. Do pola New value można wprowadzić stałą, identyfikator innej zmiennej lub nawet wyrażenie, przy czym w każdym przypadku wynik musi być typu zgodnego ze zmienną wprowadzoną w polu Evaluate. Jeśli zmienna ta nie posiada lokalizacji w pamięci, to w polu Re­sult zostanie wyświetlony komunikat:

Cannot be modified (zmienna nie może być zmodyfikowana).

Innymi komunikatami, które mogą pojawić się w polu Result na skutek wpro­wadzenia błędnego elementu w polu New value, są:

Type mismatch (błędny typ),

Constant out of range (wartość stałej poza zakresem),

Cannot evaluate this expression (obliczenie wartości wyrażenia nie jest możliwe).

Do poruszania się pomiędzy trzema polami okienka, tj. Evaluate, Result i New value, służą klawisze ↑ i ↓.

WYŚWIETLANIE LISTY ODWOŁAŃ DO FUNKCJI, PROCEDUR I METOD ORAZ ICH ODSZUKIWANIE W PROGRAMIE

Podczas zatrzymania przebiegu wykonania programu, np. na skutek ustanowie­nia punktu kontrolnego, można wyświetlić listę wszystkich odwołań do funkcji, procedur i metod, prowadzących do bieżącego wiersza wykonawczego programu. Do tego celu służy polecenie Call stack (w opcji Debug), które z dowolnego miej­sca systemu Turbo Pascal może być zainicjowane przez naciśnięcie klawiszy Ctrl-F3.


Zaawansowane programy pascalowe składają się zwykle z dużej liczby metod, procedur i funkcji, które na ogół są zapisane w różnych zbiorach dyskowych. Po skompilowaniu programu daną metodę, procedurę lub funkcję można odszukać przez zainicjowanie polecenia Find procedure (przez odpowiedni wybór w opcji Debug). Po zainicjowaniu tego polecenia na ekranie zostanie wyświetione okienko postaci:

Enter procedure name

------_

do którego należy wpisać nazwę poszukiwanej funkcji, procedury lub metody, po czym nacisnąć klawisz Enter. Spowoduje to przejście do trybu edytowania i usytuowanie kursora w wierszu zawierającym słowo kluczowe begin, rozpoczynające część wykonawczą wyspecyfikowanej funkcji, procedury lub metody. Jeśli funkcja, procedura lub metoda o podanej nazwie znajduje się w zewnętrznym zbiorze dyskowym, dołączanym do programu za pomocą dyrektywy kompilatora I, to zbiór ten zostanie najpierw wprowadzony do edytora, po czym nastąpi wspom­niane usytuowanie kursora.

Polecenie Find procedure nie powoduje zmiany aktualnego stanu sesji debuggera. Oznacza to, że jeśli wykonanie programu zostało zatrzymane w pewnym miejscu, to po wykonaniu rozważanego polecenia, polecenie Trace into (klawisz F7) nie spowoduje wykonania żadnej instrukcji w odszukanej procedurze (tj. w miejscu aktualnego położenia kursora), lecz wykonana zostanie instrukcja znajdująca się w bieżącym wierszu wykonawczym.

Ponieważ polecenie Find procedure powoduje usytuowanie kursora na początku części wykonawczej funkcji, procedury lub metody, więc wykonanie po nim pole­cenia Go to cursor (klawisz F4) spowoduje wykonanie programu od bieżącego wiersza wykonawczego do wspomnianego początku.

ZAKONCZENIE SESJI UMIEJSCAWIANIA I USUWANIA USTEREK PROGRAMOWYCH

Sesję umiejscawiania i usuwania usterek obsługiwaną przez debugger (wbudo­wany w system Turbo Pascal) należy zakończyć poleceniem Program reset. Pole­cenie to dostępne jest w opcji Run; może też być zainicjowane z dowolnego miejsca systemu Turbo Pascal przez naciśnięcie klawiszy Ctrl-F2.

Wykonanie polecenia Program reset powoduje zwolnienie pamięci przydzielonej podczas sesji przez program użytkownika i pamięci wykorzystywanej przez i debugger, zamknięcie wszystkich otwartych plików oraz inicjuje debugger do następnego przebiegu, tj. do rozpoczęcia sesji z innym programem.

1

Języki i metody programowania

8



Wyszukiwarka

Podobne podstrony:
Budowa i opis menu edytora Turbo Pascal 7
Obsługa plików w turbo pascalu
Turbo Pascal Instrukcja przypisania
Turbo Pascal - writeln, ETI Edukacja technicyno inf,, KONSPEKTY, Konspekty
PASCAL kurs, Turbo Pascal - moduly uzytkowe, WSTĘP
PASCAL kurs, Turbo Pascal - moduly uzytkowe, WSTĘP
Budowa i opis menu edytora Turbo Pascal 7
PASCAL kurs, KURS TURBO PASCALA, KURS TURBO PASCALA - wstęp
Poradnk Turbo Pascal
Lekcja Turbo Pascala
Na czym polega programowanie w TURBO Pascalu, INFORMATYKA
Kurs języka Turbo Pascal(1)
Informatyka, TURBO PASCAL, TURBO PASCAL
Kurstpv10, Kurs Turbo Pascal 7
Turbo Pascal Zmienne i ich typy, Alicja Pary˙
Notatka txt w pascalu, Turbo pascal
Turbo Pascal - wprowadzenie, ETI Edukacja technicyno inf,, KONSPEKTY, Konspekty
Kurs Turbo Pascal 7.0 By Kajoj

więcej podobnych podstron