Rexx - Debug

Il debug è una caratteristica importante in qualsiasi linguaggio di programmazione. Aiuta lo sviluppatore a diagnosticare gli errori, trovare la causa principale e quindi risolverli di conseguenza. In Rexx, l'utilità di traccia viene utilizzata per il debug. L'istruzione trace può essere implementata in 2 modi, uno è la modalità batch e l'altro è la modalità interattiva. Diamo un'occhiata a come implementare entrambe le opzioni.

Traccia in modalità batch

Il comando trace viene utilizzato per fornire un livello dettagliato di ogni comando Rexx che viene eseguito.

La sintassi generale dell'istruzione trace è mostrata come segue:

Sintassi

trace [setting]

Dove l'impostazione può essere una delle seguenti opzioni:

  • A - Traccia tutti i comandi.

  • C - Traccia solo i comandi host che vengono inviati al sistema operativo.

  • E - Traccia solo i comandi host inviati al sistema operativo che hanno generato un errore.

  • F - Traccia solo i comandi host inviati al sistema operativo che hanno provocato un errore.

  • I - Fornisce una traccia di livello intermedio dei comandi Rexx.

  • L - Questa opzione è se desideri etichettare la traccia mentre accade.

  • N - Questa è l'opzione predefinita in cui non viene eseguita alcuna traccia.

Diamo un'occhiata a un esempio del comando trace.

Esempio

/* Main program */ 
trace A 

/* Main program */ 
n = 100.45 if datatype( n, wholenumber ) then signal msg 

say 'This is a whole number' 
return 0 

msg : 
   say ' This is an incorrect number '

L'output del programma di cui sopra sarà il seguente:

5 *-* n = 100.45 if datatype( n, wholenumber ) then signal msg
   7 *-* say 'This is a whole number
This is a whole number                                                   
   8 *-* return 0

Dall'output è possibile vedere che un'ulteriore traccia è stata aggiunta all'output del programma. Si possono notare le seguenti cose sull'output:

  • Il numero di riga insieme all'istruzione eseguita viene aggiunto all'output di traccia.

  • Ogni riga che viene eseguita viene mostrata nell'output della traccia.

Funzione di traccia

Trace può essere abilitato anche con l'aiuto della funzione trace. La sintassi generale e l'esempio sono mostrati di seguito.

Sintassi

trace()

La funzione precedente restituisce il livello di traccia corrente.

Parametri

Nessuna

Valore di ritorno

La funzione sopra fornisce il livello di traccia corrente.

Esempio

/* Main program */ 
say trace() 

/* Main program */ 
n = 100.45 if datatype( n, wholenumber ) then signal msg 

say 'This is a whole number' 
return 0 
msg : 

say 'This is an incorrect number '

L'output del programma di cui sopra sarà il seguente.

N 
This is an incorrect number

La prima riga di N indica che la traccia è impostata su Normale.

Impostazione del valore di traccia

Il livello di traccia può essere impostato con la funzione di traccia. La sintassi generale e l'esempio sono mostrati di seguito.

Sintassi

trace(travel_level)

Parametri

  • trace_level - Questo è simile alle opzioni disponibili per impostare il livello di traccia.

Valore di ritorno

La funzione sopra fornisce il livello di traccia corrente.

Esempio

/* Main program */ 
say trace() 
current_trace = trace('A') 
say current_trace 

/* Main program */ 
n = 100.45 if datatype( n, wholenumber ) then 
signal msg say 'This is a whole number' 
return 0 
msg : 
say ' This is an incorrect number '

L'output del programma di cui sopra sarà il seguente:

N 
   4 *-* say current_trace 
N 
   6 *-* n = 100.45 
   7 *-* if \ datatype( n, wholenumber ) then 
   8 *-* signal msg 
   12 *-* say 'This is an incorrect number' 
'This is an incorrect number'

Tracciamento interattivo

La traccia interattiva è in cui la traccia viene eseguita durante l'esecuzione del programma. Proprio come in un IDE come Visual Studio per .Net, in cui puoi aggiungere punti di interruzione e vedere come viene eseguita ciascuna istruzione, allo stesso modo anche qui puoi vedere il programma mentre viene eseguita ogni riga di codice.

La sintassi generale è la seguente:

Sintassi

trace ?options

Dove, le opzioni sono le stesse per il comando trace come mostrato di seguito.

  • A - Traccia tutti i comandi

  • C - Traccia solo i comandi host che vengono inviati al sistema operativo.

  • E - Traccia solo i comandi host inviati al sistema operativo che hanno generato un errore.

  • F - Traccia solo i comandi host inviati al sistema operativo che hanno provocato un errore.

  • I - Fornisce una traccia di livello intermedio dei comandi Rexx.

  • L - Questa opzione è se desideri etichettare la traccia mentre accade.

  • N - Questa è l'opzione predefinita in cui non viene eseguita alcuna traccia.

Diamo un'occhiata a un esempio di implementazione della traccia attiva.

Esempio

/* Main program */ 
trace ?A

/* Main program */ 
n = 100.45 if datatype( n, wholenumber ) then 
signal msg 

say 'This is a whole number' 
return 0 
msg : say 'This is an incorrect number'

L'output del programma sopra sarà come mostrato nel programma seguente. La traccia si fermerà a ogni riga di codice; quindi è necessario premere il pulsante Invio per passare alla riga di codice successiva.

This is an incorrect number
       +++ "LINUX COMMAND /home/cg/root/5798511/main.rex"
     5 *-* n = 100.45 if datatype( n, wholenumber ) then 
+++ Interactive trace. "Trace Off" to end debug, ENTER to Continue. +++
     6 *-* signal msg 
    10 *-* msg :
    10 *-* say 'This is an incorrect number'