Hola de nuevo a todos, este es el último
post del bloque de Debugging si es
breve porque solo tiene dos posts pero son intensos, son largos pero lo he
intentado hacer todo lo práctico posible para que no os aburráis leyendo, a la
misma vez que leéis podéis hacer la práctica, así que vamos a ello.
Seguimos viendo las diferentes formas
de depuración o debugging en un
programa continuamos con el ejemplo anterior que introducimos un punto de
interrupción en la línea de código que intuíamos que era la que contenía el
error.
No solo se puede introducir un punto
de interrupción se pueden insertar varias interrupciones en el código,
normalmente se suelen insertar en aplicaciones donde hay bastantes líneas de
código, por ejemplo, 500 líneas. En el ejemplo que estamos utilizando no tiene
mucho sentido insertar más de una línea de depuración pero para explicar el
concepto de debugging viene muy
bien.
Insertamos dos puntos de interrupción:
Aquí hay varias formas, cuando se
ejecute el programa en la línea de código 9 se interrumpirá cuando llegue a la
línea 15 volverá a interrumpirse la ejecución, podemos hacer que cuando se
interrumpa la ejecución en la línea 9 se salte las siguientes líneas de
interrupción. También tenemos la opción de ejecutar las líneas de código una a
una desde un punto de interrupción a otro.
Tal y como tenemos el programa vamos a pulsar el icono Debug y nos muestra la línea sombreada en gris que significa que está sombreada, en esta parte del código todavía no hay variables declaradas:
Si queremos pasar al siguiente punto de interrupción ejecutándose las líneas que hay entre medias tenemos que pulsar el botón Resume
Este botón lo que hace es saltar al siguiente punto de interrupción ejecutándose las líneas que hay entre medias, pulsamos ese botón y la aplicación se ejecuta se muestra la ventana de JOptionPane para introducir los elementos de la matriz:
Nos fijamos en el código:
Ha ejecutado la línea donde estaba
interrumpido el programa creando la variable elementos luego ha ejecutado la siguiente la cual ha creado la variable
num_aleat ha recorrido el for y se ha interrumpido en la línea 15
donde está el siguiente punto de interrupción.
Llegados a este punto podemos pulsar la tecla de función F6 o el icono Step over para que se siga ejecutando y viendo cómo se rellena el array:
Para terminar la ejecución podemos
pulsar el botón de Terminate
o Stop
La siguiente opción de cómo depurar el programa sería pulsando de nuevo el botón Debug:
Se encuentra en el primer punto de interrupción si pulsamos la tecla Step over se ejecuta la siguiente línea de código:
Volvemos a pulsar Step over se ejecuta la siguiente:
Pulsamos de nuevo Step over y se interrumpe la aplicación porque la siguiente línea tiene un punto de interrupción:
Otra forma de depurar el programa es saltarse todos los puntos de interrupción. Si volvemos a pulsar el botón Debug y a continuación el siguiente botón Skip all breakpoints
fijaros que aparece los puntos de interrupción como tachados:
Si pulsamos el botón Resume no se va a interrumpir el
programar en la siguiente línea de pausa, sino, que se va a ejecutar sin
ninguna interrupción.
Para que se vuelvan a mostrar los
puntos de interrupción pulsamos de nuevo en el botón Skip all breakpoints.
Por otra parte, existen los puntos de interrupción condicionales para ello vamos a quitar el punto de interrupción de la línea 9 y solo vamos a dejar el punto de interrupción de la línea 15. Tenemos la pestaña Breakpoints que nos informa de todos los puntos de interrupción no solo de la aplicación en la que estamos trabajando, sino, en todo el proyecto:
Queremos que la aplicación se pause en la línea de interrupción siempre y cuando se cumpla una cierta circunstancia o condición, por ejemplo, imaginaros que tenemos problemas a la hora de rellenar el array, no se está rellenando completamente podemos indicarle que está línea se ejecute bajo una condición, no siempre. Esta condición que se ejecute si el array llega al elemento 4. Esto lo haríamos de la siguiente forma seleccionamos en la ventana Breakpoint el punto de interrupción en la parte inferior vemos que hay un check Condicional:
Seleccionamos el check Condicional y tenemos que indicarle lo siguiente:
Le estamos diciendo que haga el punto
de interrupción siempre y cuando la variable i valga 4, si no vale 4 no nos va
a hacer el punto de interrupción.
Con esto conseguimos que si el array
tiene menos de 4 elementos no va a hacer el punto de interrupción pero si tiene
más de 4 sí que va a hacer el punto de interrupción.
Si ejecutamos el Debugger y le indicamos 3 elementos:
El programa no se va a detener:
Si en cambio le indicamos 15:
El programa se detiene:
Si vamos a la pestaña Variables vemos que solo se han ejecutado 4 elementos:
Es en este elemento donde ha hecho la
pausa si pulsamos ahora el icono Resume
o la tecla de función F6 se
ejecutaría línea a línea hasta finalizar la ejecución. Esto sería un punto de
interrupción condicional.
Otro panel que nos puede ser necesario a la hora de depurar el programa es el panel Expresiones:
Imaginaros que en nuestro ejemplo nos hemos dado cuenta que el array cuando llega al elemento 4 hace “algo” que no es del todo correcto. Antes de nada desactivamos el check Condicional para que no se interrumpa la aplicación en ese elemento y añadimos una expresión, una expresión es código de programación para comprobar que valor puede tomar una variable, puede tomar la posición de un array, incluso un condicional, etc. Si añadimos en la expresión lo siguiente:
Lo que estamos haciendo con esto es decirle a Eclipse que nos muestre el valor que tiene num_aleat en la posición 4. Si pulsamos ahora en Debug se va ejecutando el programa hace la pausa en la línea 15 donde está el punto de interrupción si pulsamos Step over se sigue ejecutándose hasta llegar al final de ejecución y vemos el valor que tienen está posición:
Para finalizar vamos a ver para qué sirve el icono Step into:
Para ello tenemos una aplicación que
nos muestra las operaciones básicas: suma, resta, multiplicación y división que
está formado por varios archivos.
Operación.java
package dep;
public class Operaciones {
public static void main(String[] args) {
Suma
operacion1 = new Suma();
Resta
operacion2 = new Resta();
Dividir
operacion3 = new Dividir();
Multiplicar
operacion4 = new Multiplicar();
System.out.println(operacion1.calculo(7, 8));
System.out.println(operacion2.calculo(7, 8));
System.out.println(operacion3.calculo(7, 8));
System.out.println(operacion4.calculo(7, 8));
}
}
Suma.java
package dep;
public class Suma implements Calcula {
public int calculo(int num1, int num2) {
return num1+num2;
}
}
Resta.java
package dep;
public class Resta implements Calcula {
public int calculo(int num1, int num2) {
return num1-num2;
}
}
Dividir.java
package dep;
public class Dividir implements Calcula {
public int calculo(int num1, int num2) {
return num1/num2;
}
}
Multplicar.java
package dep;
public class Multiplicar implements Calcula {
public int calculo(int num1, int num2) {
return num1+num2;
}
}
Calcula.java (interface)
package dep;
public interface Calcula {
public int calculo(int num1, int num2);
}
Los archivos Suma.java, Resta.java, Multplicar.java y Dividir.java son bastantes parecidos para crearlos hemos utilizado la opción copiar y pegar y solo hemos cambiado el signo de la operación en la instrucción return. Sin embargo, el resultado de Multiplicar no es el esperado por lo que depuramos el programa añadimos una línea de interrupción en el código:
Pulsamos el botón Debug hace la pausa posteriormente pulsamos el botón Step over para ir ejecutando línea a línea hasta llegar a la línea donde realiza el cálculo de la multiplicación:
Pulsamos en Step into nos lleva al archivo donde está el método cálculo donde realiza la operación de multiplicar que es Multplicar.java:
Es ahí donde vemos que la línea de
código 7 está realizando una suma en lugar de una multiplicación. Este es el
uso de Step into es una forma de
depurar varios archivos a la vez.
Pues esto ha sido todo en cuanto a Debugging
os espero en el próximo bloque que va a tratar de los Streams. Os agradezco que
me sigáis, que continuéis mi blog y si tenéis sugerencias o dudas ya sabéis que
me lo podéis hacer llegar a través de los comentarios del blog o enviándome un
correo a amizba@gmail.com Hasta la próxima!
11.1 INTRODUCCIÓNDEBUGGING << >> 12.1 STREAMS
No hay comentarios:
Publicar un comentario