38. Hľadanie chýb: ERR, ERL, TRACE, *B, *F, *L
Na čo to je
Program, ktorý sa preloží, ešte nemusí robiť, čo má. Turbo-BASIC XL má niekoľko pomôcok, ktoré pomáhajú zistiť, kadiaľ program ide a čo sa pokazilo.
Ako sa to píše
| Zápis | Čo robí |
|---|---|
ERR | funkcia: číslo poslednej chyby (to isté ako PEEK(195)) |
ERL | funkcia: riadok, na ktorom nastala |
TRACE | zapne stopovanie: pred každým riadkom sa vypíše jeho číslo v hranatých zátvorkách |
TRACE - | vypne stopovanie |
*B | kláves BREAK sa dá zachytiť cez TRAP ako chyba 128 |
*B - | BREAK program zastaví ako zvyčajne |
*F | slučka FOR, ktorej začiatok je už za koncom, sa nevykoná ani raz |
*F - | FOR sa správa ako v Atari BASICu: telo prebehne aspoň raz |
*L, *L - | zapína a vypína odsadzovanie výpisu v editore – v preloženom programe nemá čo robiť |
Celý program
Súbor examples/debug.tbas:
10 REM TRACE, ERR and ERL
20 TRACE
30 FOR I=1 TO 3
40 S=S+I
50 NEXT I
60 TRACE -
70 PRINT
80 PRINT "Sum ";S
90 TRAP #FAULT
100 DIM A(5)
110 FOR I=4 TO 7:A(I)=I*I:NEXT I
120 END
130 # FAULT
140 PRINT "Error ";ERR;" at line ";ERL;", I was ";IPreklad a spustenie
Basic26 debug.tbas --simČo uvidíš
[30][40][50][40][50][40][50][60]
Sum 6
Error 9 at line 110, I was 6Ako to funguje
- Riadok 20: od tohto miesta program pred každým riadkom, na ktorý príde, vypíše jeho číslo.
- Prvý riadok výstupu je stopa: 30, potom trikrát 40 a 50 (telo slučky), a 60, kde sa stopovanie vypne. Vidíš presne, koľkokrát slučka prebehla a kam sa skákalo. Keď program „niekam zmizne“, stopa ukáže kam.
- Riadok 110: pole má prvky 0 až 5. Pre
I= 6 je to chyba 9. - Riadok 140:
ERRaERLpovedia, čo a kde sa stalo. Vypísať si pri chybe aj hodnoty premenných býva najrýchlejšia cesta k príčine.
Stopa spomaľuje a zaplní obrazovku, preto sa zapína len okolo podozrivého miesta.
*F: slučka, ktorá nemusí prebehnúť
V kapitole 10 bolo, že FOR I=5 TO 1 telo raz vykoná. S *F nie:
10 FOR I=5 TO 1:PRINT "once":NEXT I
20 *F
30 FOR I=5 TO 1:PRINT "never":NEXT I
40 PRINT "after, I=";Ionce
after, I=5Prvá slučka (bez *F) vypíše once, druhá sa preskočí celá. Je to rozumnejšie správanie a v nových programoch sa *F oplatí dať na začiatok; dobové programy však niekedy s jedným prechodom počítajú.
*B: BREAK ako chyba
Bežne kláves BREAK program zastaví s hlásením STOPPED AT LINE …. Po *B sa BREAK stane chybou číslo 128, ktorú zachytí TRAP. Program tak môže pred koncom upratať – zavrieť súbory, vypnúť zvuk – alebo BREAK úplne ignorovať:
10 *B
20 TRAP #BRK
30 DO:PRINT "Press BREAK ";:PAUSE 25:LOOP
40 # BRK
50 PRINT:PRINT "Break caught, error ";ERRČo patrilo editoru
DUMP (výpis všetkých premenných), RENUM (prečíslovanie riadkov), DEL (zmazanie riadkov) a *L sú príkazy editora Turbo-BASICu. V preloženom programe len vypíšu NOT IN COMP PRG, tak ako LIST v kapitole 25.
Pomôcky prekladača
Pri hľadaní chýb pomáha aj prekladač sám:
-vvypíše, čo pri preklade robil a ktoré slová Turbo-BASICu program používa,--strictupozorní na miesta, ktoré by pôvodný interpreter odmietol,--listing súborzapíše, čo z ktorého riadka vzniklo,- simulátor s
--sim-screenukáže obrazovku na konci.
Viac v kapitole 39.
Časté chyby
| Čo sa stalo | Čo sa stane |
|---|---|
TRACE ostal zapnutý | obrazovka plná čísel v zátvorkách |
ERR a ERL pred prvou chybou | sú 0 |
*F v programe, ktorý počíta s jedným prechodom | slučka sa nevykoná a program sa správa inak |
*B bez TRAP | BREAK program zastaví ako vždy |
| obsluha chyby nevypíše nič | chyba je „zjedená“ a program pokračuje s nezmyslami – pri ladení vždy vypíš aspoň ERR a ERL |
Vyskúšaj si
- Zapni
TRACEv programemenu.tbasz kapitoly 30 a sleduj, kadiaľ ide pri voľbe 1 a 2. - Pridaj do
debug.tbasna začiatok*Fa zmeň slučku na riadku 30 naFOR I=3 TO 1. Aká bude stopa? - Napíš obsluhu chyby, ktorá vypíše
ERR,ERLa podľa čísla aj slovný popis aspoň pre chyby 3, 5, 8, 9 a 11.
Zhrnutie
ERRaERLsú číslo a riadok poslednej chyby.TRACEvypisuje čísla vykonávaných riadkov,TRACE -to vypne.*FopravíFOR, aby vedel prebehnúť nula ráz;*Bspraví z BREAK chybu 128.- Príkazy editora (
DUMP,RENUM,DEL,*L) v preloženom programe nerobia nič užitočné.
Tým sa končí časť o Turbo-BASICu XL. Zvyšok knihy je o prekladači.
Späť: 37. Disketa · Ďalej: 39. Prekladač Basic26