Rexx - Depuración

La depuración es una característica importante en cualquier lenguaje de programación. Ayuda al desarrollador a diagnosticar errores, encontrar la causa raíz y luego resolverlos en consecuencia. En Rexx, la utilidad de seguimiento se utiliza para depurar. La instrucción de seguimiento se puede implementar de 2 formas, una es el modo por lotes y la otra es el modo interactivo. Veamos cómo implementar ambas opciones.

Seguimiento en modo por lotes

El comando de seguimiento se utiliza para proporcionar un nivel detallado de cada comando de Rexx que se ejecuta.

La sintaxis general de la declaración de seguimiento se muestra a continuación:

Sintaxis

trace [setting]

Donde la configuración puede ser cualquiera de las siguientes opciones:

  • A - Rastrea todos los comandos.

  • C - Solo rastrea los comandos del host que se envían al sistema operativo.

  • E - Solo rastrea los comandos del host que se envían al sistema operativo y que han dado lugar a un error.

  • F - Solo rastrea los comandos de host que se envían al sistema operativo y que han provocado una falla.

  • I - Esto proporciona un seguimiento de nivel intermedio de los comandos de Rexx.

  • L - Esta opción es si desea etiquetar el rastreo a medida que ocurre.

  • N - Esta es la opción predeterminada en la que no se realiza ningún seguimiento.

Echemos un vistazo a un ejemplo del comando trace.

Ejemplo

/* 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 '

La salida del programa anterior será la siguiente:

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

En el resultado, puede ver que se agregó un seguimiento adicional al resultado del programa. Se pueden observar las siguientes cosas sobre la salida:

  • El número de línea junto con la declaración ejecutada se agrega a la salida de seguimiento.

  • Cada línea que se ejecuta se muestra en la salida de seguimiento.

Función de seguimiento

El rastreo también se puede habilitar con la ayuda de la función de rastreo. La sintaxis general y el ejemplo se muestran a continuación.

Sintaxis

trace()

La función anterior devuelve el nivel de seguimiento actual.

Parámetros

Ninguna

Valor devuelto

La función anterior proporciona el nivel de seguimiento actual.

Ejemplo

/* 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 '

El resultado del programa anterior será el siguiente.

N 
This is an incorrect number

La primera línea de N indica que la traza se establece en Normal.

Configuración del valor de seguimiento

El nivel de seguimiento se puede configurar con la función de seguimiento. La sintaxis general y el ejemplo se muestran a continuación.

Sintaxis

trace(travel_level)

Parámetros

  • trace_level - Esto es similar a las opciones disponibles para configurar el nivel de seguimiento.

Valor devuelto

La función anterior proporciona el nivel de seguimiento actual.

Ejemplo

/* 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 '

La salida del programa anterior será la siguiente:

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'

Rastreo interactivo

El rastreo interactivo es donde el rastreo se lleva a cabo mientras se ejecuta el programa. Al igual que en un IDE como Visual Studio para .Net, en el que puede agregar puntos de interrupción y ver cómo se ejecuta cada declaración, de manera similar, aquí también puede ver el programa a medida que se ejecuta cada línea de código.

La sintaxis general es la siguiente:

Sintaxis

trace ?options

Donde, las opciones son las mismas para el comando trace como se muestra a continuación.

  • A - Rastrea todos los comandos

  • C - Solo rastrea los comandos del host que se envían al sistema operativo.

  • E - Solo rastrea los comandos del host que se envían al sistema operativo y que han dado lugar a un error.

  • F - Solo rastrea los comandos de host que se envían al sistema operativo y que han provocado una falla.

  • I - Esto proporciona un seguimiento de nivel intermedio de los comandos de Rexx.

  • L - Esta opción es si desea etiquetar el rastreo a medida que ocurre.

  • N - Esta es la opción predeterminada en la que no se realiza ningún seguimiento.

Echemos un vistazo a un ejemplo de implementación de rastreo activo.

Ejemplo

/* 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'

La salida del programa anterior será como se muestra en el siguiente programa. La traza se detendrá en cada línea de código; luego debe presionar el botón Enter para pasar a la siguiente línea de código.

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'