Debugging ed errori comuni

Come ogni linguaggio di programmazione, anche Proteus richiede un po' di attenzione nella stesura dei programmi. In particolare, essendo un linguaggio strutturato, sono valide considerazioni analoghe a quelle che si possono fare relativamente a linguaggi come C e Pascal.

Poiché non esiste un debugger per poter seguire l'esecuzione dei programmi passo-passo, è necessario modellare il programma in modo da stampare a video lo stato delle variabili di interesse in un determinato punto dell'esecuzione. Un sistema molto semplice per ottenere una lista completa dei valori degli identificatori pubblici in un dato momento è l'impiego del metodo DEBUG, che stampa tutti i valori nelle tre interpretazioni possibili (stringa, numero intero, numero in virgola mobile). Questo metodo non permette la visualizzazione delle variabili locali e non accede ai valori nelle strutture dati (code, pile, vettori, ecc.); per verificare singoli valori, si utilizzino CONSOLE o CONSOLELN.

Dal momento che è possibile scrivere cicli che non terminano mai, si dovrebbe porre particolare attenzione alle condizioni di uscita da essi e prevedere qualche meccanismo di emergenza, come questo:

; Non siamo certi che il ciclo termini sempre - forziamo l'uscita dopo 10
; secondi dall'entrata
ExitTime = ADD(CLOCK(), 10)
WHILE Test
  ...
  IF GT(CLOCK(), ExitTime)
    BREAK
  FI
LOOP

Un errore comune è l'utilizzo del carattere '\' nelle stringhe senza considerare l'espansione delle costanti C-like; ad esempio il seguente path di Ms-Dos™ è errato:

PathName = "C:\DOS\ATTRIB.EXE"

Infatti è interpretato in questo modo: C:[0]DOS[10]TTRIB.EXE, dove [0] e [10] indicano i caratteri ASCII 0 e 10. La scrittura corretta è la seguente:

PathName = "C:\\DOS\\ATTRIB.EXE"

Un altro errore comune è confondere le funzioni di confronto stringa con le funzioni di confronto numerico; le prime hanno prefisso STR: STREQ, STRNEQ, mentre le seconde non hanno prefisso: EQ, NEQ.

Anche le funzioni logiche possono essere confuse con le operazioni binarie (che hanno prefisso comune N); l'AND binario di due numeri si ottiene con NAND, la controparte logica con AND; lo stesso vale per or, xor, not.

I side-effects (effetti collaterali) sono anch'essi causa di frequenti errori; ad esempio, se si richiama la funzione REXMATCH all'interno di una UDF, bisogna considerare che gli identificatori predefiniti R_START ed R_LENGTH sono modificati di conseguenza all'esterno della funzione.

Un errore di sintassi frequente per chi si avvicina per la prima volta a Proteus è quello di aggiungere parentesi non richieste, come in questo caso:

IF (OS)
  CONSOLELN "Sistema operativo rilevato: Ms-Dos™ o Windows™"
FI

Al momento dell'esecuzione, Proteus segnala un errore sulle parentesi alla linea contenente l'IF; infatti, le parentesi in Proteus sono utilizzate solo per definire le funzioni, in quanto l'ordine delle operazioni è determinato implicitamente.
IF, WHILE, SWITCH e FOR, al contrario del C, non richiedono parentesi nelle loro condizioni.

Un altro errore molto frequente è l'utilizzo del metodo SET al posto di PSET in una UDF per aggiornare una variabile pubblica, oppure la dimenticanza della funzione PUB prefissa ad un identificatore in una funzione definita dall'utente.

Esempi.

; Errore! MONTHS, essendo impostato con SET, è variabile locale alla
; funzione ONSTART; la variabile pubblica MONTHS resta immodificata e quindi
; la funzione ONSTART non ha alcun effetto
FUNCTION ONSTART

  MONTHS = "Gen Feb Mar Apr Mag Giu Lug Ago Set Ott Nov Dic"
RETURN 


; Errore! R_START ed R_LENGTH non sono dentro PUB, per cui (non essendo state
; inizializzate prima dell'utilizzo) causano l'uscita anomala del programma
FUNCTION GetTag(s)

  IF REXMATCH(s, "<.*>")
    RETURN SUBSTR(s, R_START, R_LENGTH)
  FI
RETURN ""

Per finire, alcuni consigli:

Inizio pagina Prossimo argomento Argomento precedente Indice per argomenti Indice analitico
Midnight Lake iPhone Case Black Women Shoes Black Flat Shoes Leather Flats Black Patent Ballerinas Black Ballet Shoes Casual Shoes Black Shoes Women Balle Record Player Cufflinks Best iPhone XR Clear Cases iPhone XS/XS Max Leather Cases Sale Best iPhone 8/8 Plus Silicone Cases iPhone 7/7 Plus Cases & Screen Protector New Cases For iPhone 6/6 Plus iPhone 8 Case Sale iPhone Xr Case Online iPhone 7 Case UK Online iPhone X Case UK Sale iPhone X Case Deals iPhone Xs Case New Case For iPhone Xr UK Online Case For iPhone 8 UK Outlet Fashion Silver Cufflinks For Men Best Mens Cufflinks Outlet Online The Gold Cufflinks Shop Online Cheap Shirt Cufflinks On Sale Nice Wedding Cufflinks UK Online Top Black Cufflinks UK Online Mens Cufflinks Online Silver Cufflinks For Men Men Cufflinks UK Sale Gold Cufflinks UK Online Gold Cufflinks UK Silver Cufflinks UK Shirt Cufflinks Discount Online Mens Cufflinks Deals & Sales Girls Shoes For Dance Fashion Ballet Dance Shoes Best Ballet Flats Shoes UK Online Cheap Ballet Pointe Shoes UK Online Best Ballet Shoes Outlet Best Dance Shoes Sale Cheap Ballet Flats Sale UK Best Pointe Shoes Online UK Ballet Dance Shoes UK Shoes For Dance UK Best Ballet Slippers Shop Best Yoga Shoes Hotsell