Codificación aprenderaprogramar.com: CU00660B
EL DEBUGGER DE BLUEJ. DETENER UN PROGRAMA EN EJECUCIÓN
Muchas veces nos encontraremos con situaciones en las que un programa en ejecución se queda bloqueado. El caso típico puede ser el de entrada en un bucle infinito: un bucle donde nunca se cumple la condición de salida. Seguramente estés habituado a que un programa o sistema operativo se te bloquee ocasionalmente, obligándote a utilizar el administrador de tareas para finalizarlo, o incluso a reiniciar el ordenador.
Sin embargo, cuando ejecutamos un programa Java desde un entorno de desarrollo como BlueJ, normalmente existen opciones para detener la ejecución que tengamos corriendo en un momento dado sin tener que reiniciar y ni siquiera salir del entorno.
Llamamos “bug” a un error en un programa y debugger o depurador a un programa o extensión de un entorno de programación destinado al análisis de errores en los programas durante su desarrollo (pruebas) y a su corrección (debugging). Entre las funciones habituales de un debugger encontramos la ejecución paso a paso del programa y la posibilidad de establecer puntos de interrupción, es decir, puntos donde detenemos momentáneamente la ejecución del programa para analizar el estado de objetos o variables. BlueJ incorpora su propio depurador que podemos usar durante el desarrollo de nuestros programas. Además, el depurador nos servirá para detener un programa cuando ya no queramos continuar ejecutándolo, bien porque se haya bloqueado, bien porque queramos salir por cualquier motivo. El debugger de BlueJ tiene bastantes posibilidades pero solo vamos a comentar dos cuestiones:
a) Poner un punto de interrupción en un programa: esto supondrá que el programa se detendrá cuando se llegue a la línea donde hayas establecido el punto de interrupción. Para ello abre la clase donde quieres poner la interrupción y sitúate en la línea deseada. Compila la clase y en el menú Tools, elige la opción Set / Clear Breakpoint (o más sencillo aún, pulsa simplemente en la barra a la izquierda de la línea fuera del área de texto). Aparecerá un icono STOP en el lateral izquierdo que indica que se ha establecido el breakpoint.
Si modificas la clase el punto de interrupción desaparece automáticamente: solo se puede fijar sobre una clase compilada. Una vez ejecutes el código, cuando se alcance el breakpoint el programa se detendrá y se abrirá el debugger y la ventana de código en la línea donde se ha producido la interrupción.
La ventana del depurador también se puede abrir en cualquier momento, incluso durante la ejecución de un programa, desde la ventana principal de BlueJ en la opción de menú View --> Show Debugger, aunque si no hay un programa en ejecución aparecerá vacía.
En una parada por punto de interrupción, en la ventana del depurador nos aparece información de utilidad. Por ejemplo, en Call Sequence los métodos que se están ejecutando en ese momento (si hubiera constructores en ejecución aparecerían como NombreDeLaClase.<init>. En Instance variables podemos ver cuál es el estado de las variables de instancia (campos) del objeto, mientras que en Local variables podemos ver cuál es el estado de las variables locales de los métodos en ejecución. Para tipos primitivos de Java y objetos String se nos mostrará directamente el contenido de la variable, mientras que en el caso de otros objetos nos indicará como contenido <object reference>, es decir, una referencia a un objeto.
Pulsando el botón Step Into podemos ir ejecutando el programa línea a línea y comprobando los valores de variables, métodos en ejecución, etc.
b) Detener la ejecución de un programa: en cualquier momento se puede detener un programa, incluso si éste se ha bloqueado. Para ello vete a la ventana principal de BlueJ y abre el depurador. Seguidamente pulsa el botón señalado con un aspa roja y el texto Terminate. En la zona del debugger donde pone Threads te aparecerá un mensaje del tipo main (finished) que indica que la ejecución ha terminado completamente.
La terminación de un programa será algo a lo que tengas que recurrir con frecuencia, pues durante el desarrollo de código bien por errores que causan bloqueos o bien durante pruebas, es algo frecuente. En ocasiones te puedes encontrar con mensajes del tipo “Your program is already running. You cannot start another execution while the current one is still active…”. Estos son debidos a que tratamos de ejecutar un programa cuando todavía hay otro en ejecución (esto puede suceder incluso aunque hayamos cerrado todas las ventanas y pensemos que el programa terminó). En estos casos, abre el depurador y fuerza la terminación del programa pulsando el botón Terminate.
Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link: Ver curso completo.
Para hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.