Adrianistán

Debug gráfico en Prolog

16/04/2020

Hace ya un tiempo hice un pequeño tutorial de Prolog. Desde entonces hasta hoy he aprendido mucho y seguramente rehaga el tutorial en algún momento, de forma más práctica. Mientras tanto voy a repasar una sección que tenía el tutorial, el debugging

Prolog dispone de un modo de depuración textual, basado en el término trace/0. Cuando aparece, Prolog entra en modo debug y nos va informando de como se van ejecutando las cosas. Qué unificaciones realiza, cuando falla, etc Pero tiene pocas opciones de control

Sin embargo es extremadamente verboso y difícil de manipular. Es por ello que en bastantes entorno gráficos podemos hacer una llamada a gtrace/0, que abrirá un debugger gráfico.

El debugger gráfico nos permite ver el código en un editor tipo Emacs. Nos marca con un color la regla que ha probado, y si su resultado ha sido satisfactorio (color verde) o no (color rojo). Después una regla que no se puede cumplir, salta hasta el punto anterior de decisión con color amarillo. Todos los puntos de decisión que Prolog detecta se marcan arriba a la derecha, en el Call Stack, como caminos alternativos.


Arriba a la derecha se ve el camino alternativo que ha generado between

Arriba a la izquierda tenemos las variables en ese momento, que podemos inspeccionar con detalle

Por último, el control de ejecución. Podemos avanzar paso a paso sobre nuestro código, paso a paso sobre todo el código (para inspeccionar por dentro de una librería por ejemplo), podemos saltarnos una regla y lo más importante, podemos ir marcha atrás en el código para volverlo a inspeccionar. Esto último es algo que muy pocos entornos de depuración tienen y es algo extremadamente útil por si nos saltamos por error algo o queremos mirar detalladamente algo otra vez sin tener que parar y volver a empezar.


La flecha hacia abajo nos permite entrar en el código de las librerías de Prolog

El editor gráfico también nos permite añadir breakpoint o spy. Los spy se pueden añadir previamente con tspy/1 que necesita el nombre de una regla


Usando tspy y el botón del espía para ir hasta el el inicio de la regla con tspy

Code swapping

Prolog además nos permite hacer code swapping, es decir, cambiar el código que se está ejecutando sin tener que volver a iniciar el programa. Tiene algunas limitaciones no obstante. Para ello podemos activar el modo edición dentro del debugger (el lápiz) y empezar a modificar reglas siempre que no sea una que no esté en el call stack (en ese caso Prolog se guarda una copia internamente hasta se salga de ella).

Para cargar el código hay que salir del modo edición, e ir a Compile->Make. En el caso de estar editando la regla que estábamos debugeando, caso muy típico, deberemos volver hacia atrás también (flecha bombeada hacia la izquierda)


El vídeo muestra un ejemplo de code swap. Sin embargo, lo mejor es que lo pruebes por ti mismo

Aprendiendo a usar estas herramientas lograremos una fantástica prolugtividad

Tags: prolog programacion linux debug