Ejemplos prácticos de depuración de código Java en NetBeans

NetBeans es un entorno de desarrollo muy completo y profesional. Contiene muchas funcionalidades, para distintos tipos de aplicaciones y para facilitar al máximo la programación, la prueba y la depuración de las aplicaciones que se desarrollan.

Durante el proceso de desarrollo de software, se pueden producir dos tipos de errores: errores de compilación o errores lógicos. Cuando se desarrolla una aplicación en un IDE, ya sea Visual Studio, Eclipse o Netbeans, si al escribir una sentencia, olvidamos un ";", hacemos referencia a una variable inexistente o utilizamos una sentencia incorrecta, se produce un error de codificación.

Cuando ocurre un error de codificación, el entorno nos proporciona información de donde se produce y como poder solucionarlo. El otro tipo de errores son lógicos, comúnmente llamados bugs, estos no evitan que el programa se pueda compilar con éxito, ya que no hay errores sintácticos, ni se utilizan variables no declaradas, etc.

Para solucionar este tipo de problemas, los entornos de desarrollo incorporan una herramienta conocida como depurador. El depurador permite supervisar la ejecución de los programas, para localizar y eliminar los errores lógicos.

Un programa debe compilarse con éxito para poder utilizarlo en el depurador. El depurador nos permita analizar todo el programa, mientras éste se ejecuta.

El proceso de depuración (debug) se lleva a cabo añadiendo puntos de interrupción y comprobaciones en el código y ejecutándolo en el depurador.

Preparación del entorno de trabajo en NetBeans

Para iniciar NB debes seleccionar NetBeans IDE 6.9 (6.9 o una versión posterior) en el grupo de programas NetBeans.

La página de inicio ofrece información sobre el entorno. Puedes ver que se trata de una aplicación típica de Windows, con sus menús, sus herramientas y su área de trabajo.

Cierra la página de inicio pulsando sobre la X que hay en la pestaña.

Ahora, en el área de trabajo hay un panel con tres fichas: Proyectos, Archivos y Prestaciones. El área a su derecha será el área de edición.

Para abrir una ficha, simplemente ponemos el puntero del ratón sobre su nombre en el margen. Los demás paneles los iremos explicando a medida que vayamos necesitándolos.

Las aplicaciones en NB se denominan proyectos. Cada proyecto contiene uno o varios elementos. Un elemento puede ser, entre otras cosas, un archivo de código fuente. O un formulario que use la aplicación. U otras cosas necesarias.

Creación de un proyecto

El primer paso para desarrollar una aplicación es elegir el tipo de proyecto. Usa la orden de menú Archivo >>> Proyecto Nuevo.

Como podrás ver, algunas partes de la interfaz de NB no están del todo traducidas al castellano.

Selecciona C/C++ Application y pulsa el botón Siguiente.

Escribe el nombre que quieres para el proyecto (Hola en este caso) y establece la ubicación en la carpeta que desees. Pulsa Terminar.

Aparecen más fichas en el panel de la izquierda. No necesitamos ni la ficha Navegar ni la ficha Clases, por lo que repliégalos a la izquierda.

La ficha Proyectos contiene cinco categorías de archivos. Para ver los archivos de las categorías pulsa el +.

NB ha creado algunos archivos, aunque no hay todavía ningún archivo fuente.

Creemos uno. Pulsa con el botón derecho del ratón sobre la categoría Source Files de la ficha Proyectos. Elige Nuevo...

Dale el nombre Hola al archivo (la extensión .cpp se añade automáticamente).

Vamos a copiar el código de nuestro programa "Hola mundo!". Selecciona y copia el texto del programa.

Para que se compile y enlace el programa debemos generar el proyecto. Usa la orden de menú Ejecutar >>> Generar Main Project.

Se pone en marcha la compilación y el enlace (usando un archivo Makefile generado automáticamente por el entorno).

Aparece un panel Salida debajo, donde se va viendo cómo avanza el proceso, así como cualquier error que se produzca.

Nos dice es que todo ha ido bien (SUCCESSFUL) y se ha generado el ejecutable, en este caso el archivo Hola.exe, que se habrá creado en la carpeta del proyecto.

Compilación y ejecución antes de depurar

Un programa debe compilarse con éxito para poder utilizarlo en el depurador.

Compila y ejecuta la clase desde una consola (terminal en Linux).

Ejecuta la clase compilada desde consola.

Al igual que VC++, NB tiene dos modos de funcionamiento: modo de depuración (Debug) y modo de lanzamiento (Release).

Comenzamos siempre en el modo de depuración, en el que se incluyen más facilidades para la depuración de errores.

ModoCaracterísticas
DebugSe incluyen más facilidades para la depuración de errores.
ReleaseModo de lanzamiento.

Cuando decimos a NB que nuestro proyecto se encontrará en una determinada carpeta (D:\FP\Tema1\nb\), NB crea una subcarpeta con el nombre del proyecto (D:\FP\Tema1\nb\Hola\).

Dentro de esa carpeta se crea otras subcarpetas: build\Debug\MinGW-Windows, donde se colocan los archivos de código objeto, dist\Debug\MinGW-Windows, donde se coloca el archivo ejecutable (hola.exe) y nbproject, con archivos auxiliares del entorno.

Pero no es necesario ir a esa carpeta para ejecutar el programa. Podemos ejecutar el programa con la opción de menú Ejecutar >>> Ejecutar Main Project (o el botón Play de la barra de herramientas).

Creación de puntos de interrupción

Abrir el programa de NetBeans.

El proceso de depuración (debug) se lleva a cabo añadiendo puntos de interrupción y comprobaciones en el código y ejecutándolo en el depurador.

Una vez añadido algún punto de interrupción, se debe ejecutar en modo depuración.

Al igual que en Visual C++ puedes colocar puntos de ruptura en las líneas que quieras, pulsando sobre su margen izquierdo (en el número de línea).

Durante la depuración podemos hacer que el programa se ejecute paso a paso y ver los valores que toman las variables.

Ejemplo práctico de ejecución paso a paso

Crea un nuevo proyecto (Archivo >>> Proyecto Nuevo; C/C++ Application; nombre: Prueba; deja que cree el archivo main.cpp automáticamente; ubicación: \FP\Tema1\nb).

Pulsa dos veces sobre el archivo main.cpp para abrirlo (en el panel Proyecto >>> Source Files o en el panel Archivos).

Vamos a colocar nuestro propio código en main.cpp.

Luego, pulsa sobre el editor de NB y pulsa Ctrl+A para seleccionar todo el texto.

Ya tenemos todo listo para generar el ejecutable y depurar el proyecto.

Si todo va bien (debería), se genera el ejecutable y se comienza la ejecución del programa.

Sabremos cuál es la siguiente línea que se va a ejecutar porque aparece una flecha verde a la izquierda (donde el número de línea).

Debajo ha aparecido un panel con varias fichas.

Ahora estamos al principio de la función main().

Si pulsamos la tecla F8 para ejecutar la siguiente instrucción, veremos que la flecha pasa a apuntar a la primera instrucción cout << ...

Se ejecutará a continuación el código de esa línea.

Las declaraciones se pasan por alto, ya que no figuran como instrucciones en el código objeto.

Si pulsáramos ahora F7, la ejecución pasaría al código del operador << de cout, que se encuentra en la biblioteca iostream.

Como confiamos plenamente en las bibliotecas del sistema, no necesitamos analizar la ejecución de sus códigos.

En estos casos debemos pulsar el botón Continuar ejecución (o seleccionar Depurar >>> Continuar ejecución, o pulsar F8).

Si has pulsado ya F7 y has llegado al código de la biblioteca iostream, cierra esa ficha y selecciona Depurar >>> Finalizar sesión de depuración (o el botón Parar de la barra de herramientas).

Pulsa F8 hasta que le llegue el turno de ejecutarse a la instrucción cout << ...

Se activará la ventana de consola, al ejecutarse las instrucciones de esa línea, que incluye la lectura del valor del numerador.

Cambia a esa ventana e introduce un valor para el numerador.

También puedes ver los valores que tienen denominador y resultado: un valor que había aleatoriamente en sus celdas de memoria.

Sigue ejecutando el programa paso a paso pulsando F8 hasta que termine.

Observa los valores que van tomando las variables.

depuración paso a paso en NetBeans

Controles principales del depurador

Los botones tienen sus correspondientes órdenes en el menú Depurar.

A la derecha del botón Debug Main Project, que nos permite iniciar el programa en modo depuración, lo que ya hemos hecho, tenemos botones para detener la ejecución, pausarla (desactivado ahora), continuarla (F5; hasta el siguiente punto de ruptura), continuar ejecución (F8; ejecutar hasta la siguiente línea, ejecutando de golpe las llamadas a funciones o los operadores), ejecutar paso a paso (F7; entrando en las llamadas a funciones), ejecutar y salir (hasta el final del programa) y ejecutar hasta la posición del cursor.

AcciónAtajoFunción
Step over expressionShift F8Permite continuar con cada llamada a método en una expresión y ver los parámetros de entrada, así como los valores de salida resultantes de cada llamada a método.
Step IntoF7Ejecuta una línea de código.
Step OutCtrl + F7Ejecuta una línea de código.
ContinueF5La ejecución del programa continúa hasta el siguiente breakpoint.
Finish DebuggerMayúsculas + F5Termina la depuración del programa.

Step over expression

Step over expression (shift F8): permite continuar con cada llamada a método en una expresión y ver los parámetros de entrada, así como los valores de salida resultantes de cada llamada a método.

Step Into

Step Into (F7): ejecuta una línea de código.

Si pulsáramos ahora F7, la ejecución pasaría al código del operador << de cout, que se encuentra en la biblioteca iostream.

Step Out

Step Out (Ctrl + F7): ejecuta una línea de código.

Continue

Continue (F5): la ejecución del programa continúa hasta el siguiente breakpoint.

continuar ejecución (F8; ejecutar hasta la siguiente línea, ejecutando de golpe las llamadas a funciones o los operadores)

Finalización de la depuración

Finish Debugger Mayúsculas + F5) en rojo: termina la depuración del programa.

Si has pulsado ya F7 y has llegado al código de la biblioteca iostream, cierra esa ficha y selecciona Depurar >>> Finalizar sesión de depuración (o el botón Parar de la barra de herramientas).

Ventanas de información durante el debug

En el proceso de debug se usan varias ventanas situadas bajo la ventana de código.

Debajo ha aparecido un panel con varias fichas.

El depurador nos permita analizar todo el programa, mientras éste se ejecuta.

Durante la depuración podemos hacer que el programa se ejecute paso a paso y ver los valores que toman las variables.

Se activará la ventana de consola, al ejecutarse las instrucciones de esa línea, que incluye la lectura del valor del numerador.

También puedes ver los valores que tienen denominador y resultado: un valor que había aleatoriamente en sus celdas de memoria.

Configuración del depurador de Java

Se puede personalizar el depurador de Java eligiendo Herramientas (tools) > Opciones (options) y haciendo clic en la ficha Depurador de Java.

Ejercicios de comprobación del proyecto

Comprobación de la estructura de paquetes

Modifica desde Netbeans el nombre del paquete en la clase creada y cámbialo por mispaquetes2.

Haz lo necesario para subsanar el error.

Al hacer el paso anterior, cambiamos la clase Principal del proyecto (ahora está en otro paquete).

Comprueba desde la vista de Archivos de Netbeans como quedan en build las carpetas de los paquetes creados.

¿ Cual es el resultado ?.

Cada paquete representa físicamente una carpeta a nivel de S.O.

Renombrado de una clase sin reestructuración

Cambia el nombre de la clase a ProyectoJava2 sin utilizar la reestructuración.

¿ Qué pasa ?

Buenas prácticas para depurar código

El código debe estar indentado (tabulado correctamente).

Cada vez que hay una apertura con llave ({) debe tener un cierre de llave correspondiente (}).

Java distingue mayúsculas de minúsculas.

Un programa debe compilarse con éxito para poder utilizarlo en el depurador.

  • El código debe estar indentado (tabulado correctamente).
  • Cada vez que hay una apertura con llave ({) debe tener un cierre de llave correspondiente (}).
  • Java distingue mayúsculas de minúsculas.
  • Un programa debe compilarse con éxito para poder utilizarlo en el depurador.
  • Una vez añadido algún punto de interrupción, se debe ejecutar en modo depuración.
  • Durante la depuración podemos hacer que el programa se ejecute paso a paso y ver los valores que toman las variables.

Secuencia recomendada de trabajo

  1. Abrir el programa de NetBeans.
  2. Crear o abrir el proyecto.
  3. Escribir o modificar el código fuente.
  4. Comprobar la indentación del código.
  5. Verificar que cada apertura con llave ({) tenga un cierre de llave correspondiente (}).
  6. Compilar el proyecto.
  7. Subsanar los errores de codificación que indique el entorno.
  8. Ejecutar la clase compilada desde consola o mediante la opción de ejecución del proyecto.
  9. Añadir puntos de interrupción pulsando sobre el margen izquierdo, junto al número de línea.
  10. Ejecutar el proyecto en modo depuración.
  11. Avanzar por el código utilizando F5, F7, Shift F8 o Ctrl + F7, según el nivel de detalle necesario.
  12. Observar la flecha verde, las ventanas del depurador y los valores de las variables.
  13. Finalizar la sesión de depuración cuando termine el análisis.

8. Depuración en NetBeans.

tags: #ejemplos #practicos #de #depuracion #de #codigo

Publicaciones populares: