Depuración de código |
Allegro CL 6.2 proporciona varias herramientas para depurar código Lisp:
trazado de funciones
evaluación paso a paso
puntos de ruptura
panel de depuración
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:
Mediante el comando :trace
con los nombres de las
funciones que se quieran trazar. Por ejemplo, para trazar la funcion cons
, se introduce el comando
:trace cons
, y a partir de ese momento, cualquier llamada a la
función cons
es trazada. En la siguiente figura se muestra un
ejemplo.
|
Invocación del trazado de una función |
El comando :trace
sin parámetros devuelve una
lista con los nombres de las funciones que actualmente son
"trazables".
El comando :untrace
seguido de los nombres de
las funciones cuyo rastro ya no se quiere seguir desactiva el trazado de dichas
funciones.
El comando :untrace
sin parámetros anula el
trazado de todas las funciones.
Las macros trace
y untrace
se
comportan de la misma manera que los comandos :trace
y :untrace
.
También se puede activar/desactivar el trazado de funciones utilizando las opciones del menú Run.
Si se posiciona el cusor sobre una función, o bien se selecciona, y se elige la opción Run|Trace (F8), a partir de ese momento se trazará dicha función.
Para desactivar el trazado de una función, se selecciona y se elige la opción Run|Untrace (Ctrl + F8).
Con la opción Run|Untrace All (Ctrl + Shift + F8) se desactiva el trazado de todas las funciones.
La opción Run|Trace Status (Shift + F8) devuelve una lista con los nombres de las funciones que actualmente son "trazables".
La opción Run|Trace Dialog (Alt + F8) muestra la ventana de traza. Si esta ventana está disponible (aunque esté iconozada), las trazas de las funciones se mostrarán en ella en lugar de visualizarse en la ventana de depuración. En la siguiente figura se muestra un ejemplo de la ventana de traza. Cuando se selecciona una llamada a función (en la figura está seleccionada la llamada "1 longitud"), en el campo Arguments se muestran los argumentos de la llamada, y en el campo Values Returned el valor devuelto por la misma. El botón Clear borra el campo Trace History y el botón Scroll to Bottom muestra la base del campo Trace History. Los números situados a la izquierda de los nombres de las funciones son etiquetas sin ningún significado más.
|
![]() |
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 |
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.
Es posible establecer un punto de ruptura sobre el símbolo
actualmente seleccionado mediante la opción de menú Run|Set Breakpoint
(F7). Cuando se evalúe una expresión Lisp que contenga dicho símbolo,
se interrumpe la evaluación, y se despliega una ventana en la que el
usuario puede elegir iniciar el depurador, abortar el proceso de
evaluación o bien continuar con el proceso. Por ejemplo, si se establecen
puntos de ruptura para los símbolos *
y +
, y
posteriormente se introduce en el intérprete la expresión (+ (* 3 2)
4)
, se despliega la siguiente ventana.
|
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 |
La opción Run|Break Status (Shift + F7) devuelve una lista con los puntos de parada actuales.
Para eliminar un punto de parada, se selecciona el símbolo y se elige la opción de menú Run|Remove Breakpoint (Ctrl + F7)
La opción de menú Run|Remove All Breakpoints (Ctrl + Shift + F7) permite anular todos los puntos de parada.
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 |
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.