jueves, 24 de marzo de 2011

Depuración de Java con Eclipse


En esta entrada voy a intentar dar unas primeras nociones de cómo facilita Eclipse la depuración de código. En su modo de depuración, Eclipse nos permite ejecutar paso a paso el código y analizar el contenido de las variables.

Lo primero que hay que hacer es definir en qué punto o puntos del código queremos que la ejecución del programa se pause. Para ello, definiremos puntos de ruptura (breakpoints) en las lineas de código donde queramos que la ejecución pause.

Para definir un punto de ruptura (o para eliminar uno existente), nos situamos en la linea que queramos y seleccionamos "Run -> Toggle breakpoint" o hacemos doble-click en la barra a la izquierda de la ventana del código. Al definir un punto de ruptura aparecerá en dicha barra un punto, tal y como se puede ver en la figura.


Una vez tenemos definidos los puntos de ruptura que queramos, iniciamos el depurador seleccionando desde una clase ejecutable "Run -> Debug" o, alternativamente, dando al botón con el bicho:


Lo primero que vemos es que el Eclipse cambia de la perspectiva Java a la Perspectiva Debug. En esta perspectiva, además de el código fuente, el esquema o la consola, podemos ver la información de las variables y una ventana donde se muestran los hilos de ejecución.

En la siguiente imagen podemos ver cómo la ejecución se ha detenido en la linea 14 del main (donde habíamos definido el punto de ruptura) y cómo dicha linea aparece marcada en el código fuente. En la figura podemos ver el contenido de las variables y objetos que existen en el momento en que se ha pausado la ejecución, lo cual nos va a ayudar mucho en la depuración.


Además, podemos indicar que la ejecución siga o se detenga a nuestro gusto utilizando los botones de la vista Debug (o las opciones del menú "Run"). A continuación explicamos las básicas.

Resume. Continúa la ejecución del programa hasta el próximo punto de ruptura o hasta que finaliza la ejecución.
    Terminate. Finaliza la ejecución del programa.
      Step into. Se ejecuta la linea actual y, en caso de ser una llamada a un método, la ejecución continúa dentro del método.
        Step over. Se ejecuta la linea actual y se pasa a la linea siguiente sin entrar en los métodos.
          Step return. Se sigue ejecutando hasta que se ejecute un return. Es decir, se ejecuta por completo el método en el que estemos y se pasa a la linea siguiente a la invocación del método.
            Con todo esto, encontrar los defectos que tengamos en el código se hace mucho más fácil. Por supuesto, hay muchas más cosas que decir acerca de la depuración. Todos los que estéis interesados podéis consultar el manual de Eclipse.

            ¿Qué os parece? ¿Pensáis que sabiendo cómo depurar el código programaréis mejor?

            12 comentarios:

            1. Gracias! Necesitaba hacerlo y no recordaba cómo había que proceder.

              ResponderEliminar
            2. Muchas gracias, yo tambien soy fanatico del eclipse, te tomare un poco de info para mi proxima post! De paso dejo mi link de referencia donde explica un poco mas como debuggear con eclipse y que son los breakpoints!

              http://java-white-box.blogspot.com.ar/2012/05/eclipse-que-es-debuggear-que-es-un.html
              Saludos

              ResponderEliminar
            3. Hola Nicolás,

              Gracias por el enlace, pues complementa esta entrada.

              Y enhorabuena por el blog, es muy interesante.

              Un saludo,

              ResponderEliminar
            4. De nada Raúl, tu blog tambien me parece interesante, me agrego como suscripto.

              Saludos!

              ResponderEliminar
            5. Raúl me has dado la vida. Gracias. Vengo de Access y estoy empezando java por mi cuenta (llevo 2 meses viendo videotutoriales de Jesús Conde) y estaba loco por no tener una depuración de código paso a paso como en Access.

              ResponderEliminar
            6. Gracias por el comentario Fausto.

              Me alegro de que te haya sido útil. ¡Ánimo con el Java!

              ResponderEliminar
            7. Este comentario ha sido eliminado por el autor.

              ResponderEliminar
            8. Hola una consulta como podria ejecutar una variable ??
              Ejemlo
              string x;
              x = "1+23+4-2";

              Espero ayuda Gracias!

              ResponderEliminar
            9. Hola JMiguel,

              Una variable no se ejecuta, no es más que un espacio de memoria donde almacenas algo.

              Si te refieres a cómo modificar el valor de una variable durante la depuración, en la perspectiva de depuración puedes encontrar información del valor actual de las variables y, si quieres, puedes modificar dicho valor.

              ResponderEliminar
            10. Existe alguna manera de ver las variables de tipo byte[] como string?? que ver bytes es poco informativo...

              ResponderEliminar
            11. Puedes utilizar el "Detail Formatter" del depurador. En este enlace tienes un ejemplo: http://www.robertwloch.net/2012/01/eclipse-tips-tricks-detail-formatter/

              ResponderEliminar