Depurar (debug) un programa Java con Eclipse

Existen muchos casos en los que se hace difícil entender lo que pasa en un programa. La solución es depurar (debug) el código del programa.

La máquina virtual de Java, tiene capacidades de depuración de código incluso desde una máquina remota. Eclipse hace que la depuración sea sencilla.

¿Qué es depurar el código o programa?

Depurar un programa es recorrerlo paso a paso, viendo el valor de las variables del programa. Esto nos permite ver exactamente qué está pasando en nuestro programa cuando se está ejecutando una línea de código específica.

¿Cómo depurar un programa Java en Eclipse?

Lo primero es colocar un punto de interrupción (breakpoint), en una línea de código de nuestro programa. Doble click en el margen izquierdo de la ventana donde vemos el código para crear el breakpoint.

Usaremos el código del ejemplo anterior para depurar el método sort:

Punto de interrupción

Lo siguiente es iniciar nuestro programa con la opción depurar (debug). Nuestro programa se ejecutará normalmente hasta encontrar la línea donde colocamos el punto de interrupción. Eclipse detendrá la ejecución y solicitará permiso para cambiar a la perspectiva Debug. Hacer click en “Remember my decision” y "yes". Entonces aparecerá la perspectiva debug con nuestra línea marcada, mostrando información sobre el estado de la ejecución.

Perspectiva Debug en Eclipse

Eclipse tiene varias formas de mostrarnos nuestros proyectos. Estas formas son llamadas perspectivas. Aunque no lo hayamos notado, hemos estado trabajando hasta ahora en la perspectiva Java.

Perspectiva de depuración


Cuando cambiamos a la perspectiva Debug, la primera impresión es confusa ya que aparecen nuevas vistas (ventanas) y cambian de posición con respecto a la perspectiva Java. Dado que usaremos mucho la perspectiva Debug, aconsejo reordenar las pestañas. Arrastrando y soltando las pestañas, podremos modificar su posición.

Despues de modificar la perspectiva de depuración

En la esquina derecha arriba, podemos ver la barra de perspectivas con la perspectiva Debug seleccionada. Si queremos volver a la perspectiva Java, basta con hacer click en Java.

Las nuevas vistas de la perspectiva debug son Debug, Variables y Breakpoint. Además, la vista de código, muestra marcado con verde, la línea donde está detenida la ejecución.

Vista Variables

En esta vista veremos una línea por cada variable, campo o parámetro. Si hacemos click en cada uno, veremos su contenido.

Vista Breakpoints

Aquí podemos ver la lista de todos los puntos de interrupción que tenemos. Podemos habilitar o deshabilitar un breakpoint con el check a la izquierda de cada breakpoint.

Vista Debug

La vista debug nos muestra la lista de aplicaciones que se están ejecutando y algunas que terminaron su ejecución.

Vista de depuración

En la imagen, podemos ver que los tres primeros programas están ejecutándose y el último terminado. Los dos primeros, se ejecutan en modo debug y se puede ver el hilo de ejecución (thread). El tercero no está en debug por lo que no se ve el hilo.

El primero tiene la ejecución suspendida en la línea 22, del método sort, de la clase ForArray2. También vemos que está detenido en el método main, linea 10 de la misma clase. Esto es lo que se conoce como pila de ejecución.

La pila de ejecución, se forma con las subsecuente llamadas de un método dentro de otro método. En la base, está el primer método “main” desde donde se llamó al método sort.

Botones para controlar la depuración

En la barra de botones principal, al lado de imprimir, vemos los botones para manipular la ejecución de la depuración de código.

Barra de botones de depuración

Las funciones de estos botones, por orden, son:

  1. Resume(F8); continúa con la ejecución (hasta el próximo breakpoint).

  2. Suspend; podemos detener la ejecución aunque no alcancemos un breakpoint (muy útil cuando entramos en un ciclo infinito).

  3. Stop; detiene la depuración.

  4. Step Into (F5); se detiene en la primer línea del código del método que estamos ejecutando. Si no hay método, hace lo mismo que Step Over.

  5. Step Over (F6); pasa a la siguiente línea que vemos en la vista de código.

  6. Step Return (F7); vuelve a la línea siguiente del método que llamó al método que se está depurando actualmente. O lo que es lo mismo, sube un nivel en la pila de ejecución, que vemos en la vista Debug.