Depuración de código

Índice

 

Allegro CL 6.2 proporciona varias herramientas para depurar código Lisp:

 

Trazado de funciones

Con esta herramienta ("tracer") es posible seguir el rastro de las llamadas a las funciones. Cuando se está siguiendo el rastro de una función, se muestra al usuario información de las llamadas y retornos de la función.

Hay distintas maneras de activar/desactivar el trazado de funciones utilizando comandos o macros:

Invocación del trazado de una función

 

También se puede activar/desactivar el trazado de funciones utilizando las opciones del menú Run.

 

Ventana de traza


Por último, todas las operaciones relativas a  la traza de funciones que se pueden hacer mediante comandos, macros o el menú Run, también se pueden hacer mediante la paleta extendida. Esta paleta se muestra mediante la opción de menú View|Extended Toolbar (F12). En la siguiente figura se muestra esta paleta con los botones relativos a la traza de funciones enmarcados.

 

Paleta extendida - Traza de funciones

 

Evaluación paso a paso

A partir de la versión 6.0 de Allegro CL solamente es útil la evaluación paso a paso de código compilado, en oposición a las versiones anteriores en las que sólo era útil la evaluación paso a paso de código interpretado. Como consecuencia de este cambio, evaluar paso a paso código interpretado a partir de Allegro CL 6.0 significa evaluar paso a paso el propio intérprete con gran cantidad de pasos que carecen de interés para el usuario.

 

Puntos de ruptura

Ventana desplegada ante un punto de ruptura

Por ejemplo, si se establece un punto de ruptura en la función factorial definida anteriormente en esta página, y se introduce la expresión (factorial 4), el sistema muestra una ventana como la de la figura anterior. Si se elige la opción Abort, se interrumpe el proceso de evaluación de la expresión (factorial 4) como se muestra en la siguiente figura.

Interrupción del proceso de evaluación a partir de un punto de ruptura

Si se elige la opción Invoke Selected Restart repetidas veces, el resultado que se obtiene se muestra en la siguiente figura. (Puede observarse que es similar al obtenido cuando se traza la función factorial).

Continuación del proceso de evaluación a partir de un punto de ruptura

Si se elige la opción Debug se inicia la ventana de depuración como se muestra en la siguiente figura.

Ventana de depuración  a partir de un punto de ruptura

 

Todas las operaciones relativas a puntos de ruptura que se pueden hacer mediante los comandos del menú Run, también se pueden hacer mediante la paleta extendida. Esta paleta se muestra mediante la opción de menú View|Extended Toolbar (F12). En la siguiente figura se muestra esta paleta con los botones relativos a los puntos de ruptura enmarcados.

Paleta extendida - Puntos de ruptura

 

Panel de depuración

Si se introduce en la ventana de depuración una expresión que al evaluarla produce un error, aparece en pantalla una ventana indicando el error producido y a partir de esa ventana se puede iniciar el depurador. Por ejemplo, si se teclea en el prompt el símbolo S que no está definido, se produce un error y se muestra la ventana:

 

Ventana de información de error

Si se pulsa el botón Abort, se cierra la ventana de aviso del error y se regresa a la ventana de depuración sin hacer ningún seguimiento del error.

Si se pulsa el botón Invoke Selected Restart, dependiendo de la opción seleccionada (con el ratón o con las flechas de desplazamiento) la respuesta del sistema será diferente. En la siguiente lista se muestra el comportamiento de cada una de las opciones:

Si se pulsa el botón Debug, cambia el aspecto de la ventana de depuración, apareciendo en la parte superior de la ventana el panel de depuración y permaneciendo en la parte inferior el intérprete. En la siguiente figura se muestra un ejemplo.

 

Ventana de depuración con el panel de depuración visible

En la parte superior derecha del panel de depuración aparece el mensaje de error. En la parte inferior del panel se muestra la pila de llamadas que han conducido hasta el error.