Mechanizmus ošetrenia chýb sa riadi nasledujúcimi akciami:
Akcia ON ERROR nastavuje správanie interpreteru skriptu pri výskyte chyby nasledovne:
ON ERROR NONE - nastaví štandardné spracovanie chyby (ukončenie vykonávania skriptu).
ON ERROR Label - nastavenie obsluhy chýb. Ak nastane chyba, skript sa neukončí, ale vykoná sa skok na dané návestie (Label). Preddefinované lokálne premenné _ERR_NR, _ERR_MSG a _ERR_LINE sú predtým automaticky naplnené popisom chyby. V rámci obsluhy chyby je možné vykonať akcie RETRY (opakované vykonanie akcie, ktorá spôsobila chybu) alebo RESUME (pokračovanie skriptu za akciou, ktorá spôsobila chybu). Návestie sa musí nachádzať v rovnakej procedúre (alebo inicializačnej časti), ako akcia.
ON ERROR OFF - ak sa vyskytne chyba, postupnosť spracovanie akcií sa nepreruší a nastavia sa len preddefinované lokálne premenné _ERR_NR, _ERR_MSG a _ERR_LINE. Následným testom _ERR_NR je možné chybu detekovať a ošetriť. V tomto režime sa prístupom na premennú _ERR_NR (prečítaním hodnoty) táto premenná automaticky nastaví na hodnotu _ERR_NO_ERROR.
ON ERROR ON - obnovenie obsluhy chýb do stavu, ktorý bol pred akciou ON ERROR OFF.
Poznámka:
Zmena nastavenia správania sa pri chybe je platná len v rámci kontextu
(procedúry). Ak je akcia použitá v rámci procedúry, po jej ukončení
sa zmeny v nastavení zrušia a nastavia do stavu, aký bol definovaný pred
volaním danej procedúry.
Ak vznikne chyba, v rámci procedúry sú podľa aktuálneho nastavenia obsluhy chýb, možnosti:
- Ak procedúra definuje obsluhu chyby ON ERROR, táto chyba sa spracuje podľa vyššieho popisu.
- Ak procedúra nedefinuje obsluhu chyby, táto bude ukončená a chyba sa prejaví tak, ako keby vznikla na akcii volania procedúry:
PROCEDURE Proc
IF 1
THEN ; chyba vznikla tu
RETURN
ENDIF
END Proc
BEGIN
CALL Proc
END
Takto napísaný event sa ukončí chybou.
PROCEDURE Proc
IF 1 THEN ;
chyba vznikla tu
RETURN
ENDIF
END Proc
BEGINN
ON ERROR ErrorHandler
CALL Proc
END
ErrorHandler:
END
Chyba, ktorá vznikne v procedúre Proc, spôsobí jej ukončenie. Keďže chyba nie je obslúžená, táto sa prejaví tak, ako keby vznikla spracovaním akcie CALL Proc. Zavolá sa, teda, obsluha chyby ErrorHandler.
PROCEDURE Proc
ON ERROR ErrorHandlerProc
IF 1 THEN ;
chyba vznikla tu
RETURN
ENDIF
RETURN
ErrorHandlerProc:
RETURN
END Proc
BEGIN
ON ERROR ErrorHandler
CALL Proc
END
ErrorHandler:
END
Chyba, ktorá vznikne v procedúre Proc, spôsobí skok na obsluhu ErrorHandlerProc. Keďže chyba
je obslúžená, procedúra sa normálne ukončí a obsluha ErrorHandler
sa nezavolá.
Chybový stav je popísaný číslom riadku, na ktorom chyba vznikla (z pohľadu ESL skriptu, ktorý popis chyby tvorí), chybovým kódom
(Chybové stavy) a v niektorých prípadoch bližším popisom chyby.
Ďalej nasleduje úplný výpis volaní (akcie CALL), prostredníctvom ktorých bola akcia, ktorá skončila s chybou, vykonaná. Podrobný popis výpisu volaní je uvedený pri popise funkcie %GetCallChain.
Súvisiace stránky:
Add Comment