CSL-CROOK - Śledzenie programów binarnych
Do każdego programu dołączane są podprogramy śledzące i monitorujące. Dołączanie tych programów jest sterowane odpowiednimi opcjami (opcje ?TRA, ?ARR). Podprogramy śledzące wykonują testy podczas przebiegu programu i w przypadku wykrycia błędu wyprowadzane są odpowiednie komunikaty. Korzyści ze śledzenia otrzymuje się kosztem zwiększonego czasu przebiegu programu i zwiększonej pamięci operacyjnej. Wielkość o jaką zostaną zwiększone te dwa elementy (czas i pamięć) określona jest przez wybrany poziom śledzenia. Im wyższy jest poziom śledzenia, tym większy czas przebiegu programu i większy obszar pamięci zajętej przez program.
Uruchomienie programu z opcją TRA[CE] jest następujące:
- [ASS,<strumień>,<TZ> [,<liczba sektorów>] <nazwa programu> [,<poziom śledzenia>] [,<strumień>]
- Nazwa programu - jest nazwą binarnego programu uruchamianego przez użytkownika;
- Poziom śledzenia - należy podać liczbę od 0-3 określającą wybrany poziom śledzenia programu;
- Strumień - jest nazwą strumienia przywiązanego zleceniem ASS do zbioru, do którego ma być generowany kod śledzenia programu;
Określone wyżej parametry są opcjonalne. Jeżeli w programie jest zapalona opcja TRACE dyrektywą #OPT, natomiast w trakcie uruchamiania programu nie pojawią się parametry to nie będzie generowany kod śledzenia. I odwrotnie, jeżeli pojawią się parametry w trakcie uruchamiania programu a nie została użyta wcześniej dyrektywa #OPT w programie to również kod śledzenia nie będzie generowany.
Przykłady:
CRF, WYNTRA,100 ASS,1, WYNTRA BINPRG,3,1 CRF TRACE ASS,10, TRAFIL,100 ASS XYZ TRACE BIN,3,10 BINPRG,2, XYZ BINPRG,3
Wyróżniamy następujące poziomy śledzenia:
Poziom 0
Programy uruchamiane z poziomem śledzenia zero (0) zajmują mniejszy obszar pamięci i krótszy jest czas obliczeń od analogicznego programu uruchomionego z wyższym poziomem śledzenia (1,2,3). W przypadku wykrycia błędu wyprowadzany będzie tylko komunikat z numerem błędu oraz dodatkowo z numerem linii fortranowskiej, w której wystąpił błąd. Numer ten odpowiada odpowiedniemu numerowi linii na listingu programu, wykonanego w czasie kompilacji.
Wyprowadzany komunikat ma następującą postać:
#EXECUTION ERROR <nr błędu> AT LINE <nr linii>
Przykład:
#FORTRAN 0 _ MASTER 1 _ I=1 #1 2 _ J=0 #2 3 _ K=I/J #3 4 _ L=0 #EXECUTION ERROR FI 2 AT LINE 3 5 _ STOP #STOP 0 7 _ END ' #END
Poziom 1
Generowane są nazwy podprogramów i łańcuchy RETURN wyjść z podprogramów, które są wywoływane w trakcie realizacji programu;
Przykład:
@PROC1 @RETURN
Podane nazwy poprzedzone znakiem "@" odpowiadają nazwom odpowiednim podprogramom śledzonym;
Poziom 2
Generowane są wszystkie informacje jak w poziomie 1 i dodatkowo podawane są wszystkie etykiety znajdujące się na drodze działającego programu;
Przykład:
@PROC1 @100 @200 @10 @RETURN
Podane liczby poprzedzone znakiem "@", odpowiadają dokładnie odpowiednim etykietom napotkanym na drodze śledzenia procedury fortranowskiej;
Poziom 3
Generowane są wszystkie informacje zawarte w poziomie 2 i dodatkowo numery rekordów fortranowskich programu źródłowego. Cyfry generowane w kodzie śledzenia odpowiadają numerom instrukcji (w poszczególnych segmentach) na listingu w czasię kompilacji Fortranem;
Przykład:
@PROC1 @100 #2 #3 @200 #5 @10 @RETURN
Podane cyfry, poprzedzone znakiem "#" odpowiadają dokładnie numerom instrukcji fortranowskich. Numery te są zgodne z numerami instrukcji z listingu w czasie kompilacji Fortranem (zapalona opcja ?LIS);
Istnieje możliwość śledzenia poszczególnych (wybranych przez użytkownika) segmentów programu. Służy do tego dyrektywa #OPT. Niżej pokazano to na przykładzie.
Przykład:
#OPT(NTRA) #FORTRAN MASTER ..... END #OPT(TRA) SUBROUTINE TEST ..... RETURN END #OPT(NTRA) FUNCTION BETA (X, I) ..... END #END
W czasie uruchamiania programu ze śledzeniem lub bez śledzenia (poziom śledzenia 0) istnieje możliwość zmiany poziomów śledzenia. Można tego dokonać w trakcie liczenia programu. Należy wtedy wykonać następującą sekwencję zleceń języka operatora:
- po uruchomieniu programu, wykonać przerwanie operatorskie z monitora OPRQ.
- jeżeli pojawi się komunikat:
<nazwa programu> STOPPED <liczba>
wykonać zlecenia:
- ST,<nazwa programu>,1,<poziom śledzenia>
- RS,<nazwa programu>
- zlecenia te należy wykonać dla programów współpracujących z końcówką.
- dla programów wykonujących się w tle zastosować zlecenia:
- SP,<nazwa programu>
- ST,<nazwa programu>,1,<poziom śledzenia>
- RS,<nazwa programu>
Źródło: Translator języka CSL-CROOK dla minikomputera MERA-400 w systemie operacyjnym CROOK-4, Instrukcja Programisty (wersja-17/2), Janusz Gocałek, Jacek Klauziński, Poznań, 1985