CSL-CROOK - Śledzenie programów binarnych

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania

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