En esta práctica se analiza cómo trabajar con el debugger de Eclipse o Netbeans.
Un debugger o depurador es la herramienta software que permite analizar el código mientras se ejecuta de forma controlada. Con él se puede encontrar la causa de un error, o incluso conocer mejor su funcionamiento. Algunas de las acciones principales son: establecer puntos de interrupción o de ruptura, suspender la ejecución del programa, ejecutar el código paso a paso o examinar el contenido de las variables.
Hay varias maneras de lanzar el debugger en Eclipse:
En todos estos casos, la clase se ejecuta. Pero es conveniente en todos ellos abrir la “vista de depuración” desde el menú Windows > perspective > Open perspective > Other> Debug. Veremos información relativa al programa que se está ejecutando. Si no tuviéramos abierta esta vista, se mostraría un mensaje al ejecutar en modo depuración preguntándonos por su apertura.
Al cambiar a la vista depuración, se muestra en la barra de herramientas una serie de botones: para continuar la ejecución, suspenderla, pararla, para meterse dentro de la primera línea de un método, avanzar un paso la ejecución, avanzar el programa hasta salir del método actual, etc.
En esta vista se pueden ver varias zonas:
EDITOR: se va marcando la traza de ejecución del programa y se ve una flecha azul en el margen izquierdo de la línea que se está ejecutando
DEBUG: muestra los hilos de ejecución. En la imagen solo se muestra un hilo y debajo la clase en la que está parada la ejecución mostrando el número de línea.
INSPECCIÓN: muestra los valores de las variables y de los puntos de ruptura (breakpoints) que intervienen en el programa en un momento determinado. Desde aquí se puede modificar el valor de las variables haciendo clic en él y cambiándolo (el nuevo valor se usará en los siguientes pasos de ejecución). También desde la pestaña Breakpoints se puede activar o desactivar un punto de ruptura, eliminarlo, configurarlo para que la ejecución se detenga cuando se pase por él un nº determinado de veces, etc.
CONSOLA: muestra la consola de ejecución del programa que se está depurando.
Veamos ahora el menú Run de la perspectiva de depuración:
Crea un nuevo proyecto en Eclipse y llámalo P1T4. Copia el siguiente fichero Java y guárdalo como LlenarNumero.java:
public class LlenarNumero {
public static void main(String[] args) {
int n = 5;
int[] tabla = new int[n];
tabla = llenar(n);
int suma = sumar(tabla);
System.out.println(«La suma es:» + suma);
}
private static int[] llenar(int n) {
int[] tabla = new int[n];
for (int i = 0; i < n; i++)
tabla[i] = i * 10;
return tabla;
}// llenar tabla
public static int sumar(int[] tabla) {
int suma = 0;
int n = tabla.length;
for (int i = 0; i < n; i++)
suma = suma + tabla[i];
return suma;
}// sumar tabla
} // fin c
Fíjate que se definen tres bloques, el método main(). El método Llenar() recibe el parámetro entero n y devuelve un array (vector) con n enteros. El método Sumar() recibe un array (vector) de datos, suma sus elementos
Vamos a empezar el proceso de depuración abriendo la vista de depuración (menú Window > perspective > Open perspective > other > Debug).
Ahora, para empezar a depurar una clase establecemos un breakpoint. Para ello, se ha de seleccionar una línea en nuestro código donde queremos que la ejecución se detenga y así podremos ver los valores que tienen las variables
en ese momento. Para ponerlo, hacemos doble click en el margen izquierdo del editor, justo en la línea donde queremos que se detenga la ejecución. Aparecerá un circulito a la izquierda. Pon uno en la misma línea que se ve en la figura (tabla[i] = i*10;) linea 14. En esta línea se va llenando el array): Estableciendo un breakpoint y devuelve la suma.
Ahora ejecuta el programa en modo depuración. Para ello, pulsa el botón Debug. Lo que ocurrirá será que el programa se ejecutará de manera natural hasta llegar al punto de ruptura establecido.
En la ventana Debug aparece la pila de llamadas, donde se ven cada uno de los hilos de ejecución. En este caso solo hay uno (Thread main[]).
Debajo de esta línea se muestra el nombre de la clase con el método donde está ahora la ejecución parada clase LlenarNumero, método llenar() y se muestra también el número de línea donde está detenida la ejecución (línea 22):
La siguiente línea muestra quién ha llamado a este método, en este caso la llamada se hace desde la clase LlenarNúmero y dentro del método main() en la línea 14, en esta línea está la sentencia tabla = llenar(n). Al hacer click en estas líneas se muestra la línea de código que se está ejecutando.
Ahora podemos usar los siguientes botones:
En cualquier momento podemos finalizar el depurador pulsando Terminate
Una flechita nos indica la línea que se está ejecutando. Para quitar el punto de ruptura de alguna línea simplemente hacemos doble click en el circulito.
Se pueden establecer puntos de ruptura condicionales. Vamos a modificar el que tenemos para que la ejecución se detenga cuando i = 3. Para ello, desde la zona “Inspección” hacemos clic en la pestaña Breakpoints y marcamos la casilla Conditional. Seleccionamos Suspend when “true” y escribimos la condición a evaluar. Esta condición debe devolver un valor booleano.
Ahora cuando la i alcance el valor 3 se parará la ejecución y podremos empezar a usar los botones para ejecutar paso a paso.
Si queremos eliminar este breakpoint seleccionamos el botón y con los borraremos todos.
El depurador de Netbeans es mas sencillo y muy parecido. Primero crear el siguiente proyecto con nombre: depurador_en_netbeans con el siguiente código
Si lo ejecutáis da de solución: 45 . Ahora con el debbuger vamos a entender que sucede. Añadir un breakpoint en la linea donde esta el n = n + i ; (mi linea 8). Se marcará la linea en rojo. Lanzamos el código en modo depurador es
En la ventana inferior aparecerá una ventana llamada Variables en la cual si vamos avanzado la ejecución del código con los botones veremos como cambia el valor de las variables , en este caso el botón verde.
Para quitar un breakpoint doble click en él.