Uso del Debugger en Codeblocks

El depurador (debugger) es una herramienta esencial en el desarrollo de software, ya que permite rastrear y corregir errores en el código. Code::Blocks es un entorno de desarrollo integrado (IDE) popular que admite varios lenguajes de programación, incluido C. A continuación se proporciona una breve guía sobre cómo usar el depurador en Code::Blocks para programas escritos en C:

Configurar el Proyecto: Para configurar el proyecto, primero, se debe crear un nuevo proyecto en Code::Blocks o abrir uno existente. Hay que asegurarse de haber incluido la información de depuración al compilar tu programa. Para ello, podemos revisar que las opciones de compilación incluyan información de símbolos de depuración (como -g en GCC).

Establecer Puntos de Interrupción: Los puntos de interrupción son lugares en el código donde deseas que el depurador suspenda la ejecución para que se pueda inspeccionar el estado de las variables y el flujo del programa. Es también llamado breakpoint. Para activar un breakpoint existen varias formas de realizarlo:

  • Haciendo clic en el margen izquierdo del editor de código en la línea donde se desea establecer un punto de interrupción.
  • Posicionando sobre la linea que queremos hacer el punto de interrupción y tocar F5.
  • Haciendo botón derecho sobre la linea que queremos y seleccionar la opción Toogle breakpoint.

Tener en cuenta que con todas las opciones anteriores aparecerá un círculo rojo para indicar el punto de interrupción.

A TENER EN CUENTA:

No se deben ubicar los breakpoints sobre las declaraciones de variables de programa. Estas instrucciones efectúan reserva de memoria estática en el momento de la ejecución del programa. El programador puede abstraerse de estas cuestiones ya que los recursos del hardware son administrados por el sistema operativo.

Además podrían no funcionar si la ruta/archivo donde está alojado el proyecto contiene espacios en blanco u otros caracteres especiales. Se recomienda usar solo letras y símbolos _ en lugar de espacios.

Inicio de la Depuración:

Una vez construido el proyecto, si el programa fué compilado sin errores y se han marcado los Breakpoints, es posible iniciar la depuración desde el menú Debug ► Start o presionando la tecla F8. Esto compilará y ejecutará el programa en modo de depuración.

La ejecución desde el inicio del programa hasta la primera línea de código marcada con el Brekpoint se efectúa de la manera convencional. Una vez alcanzado este punto observaremos que nuestro proceso se detiene en la línea correspondiente al punto de interrupción (breakpoint) previamente configurado. Hay que destacar que esta línea de código aun no ha sido ejecutada, lo cual es representado por una flecha amarilla (muestra cual será la siguiente línea de código a ejecutar).

Inspección Variables y Flujo: Cuando se alcance un punto de interrupción, el depurador se detendrá y permitirá inspeccionar el estado actual de las variables. En la ventana “Watches” o “Variables locales”, se puede ver los valores de las variables y cambiarlos si es necesario. También se puede usar las herramientas de navegación para avanzar línea por línea, saltar a funciones llamadas y más.

La ventana o consola de nuestro programa ya no contiene el foco (interacción con el usuario), porque ahora es la ventana del editor quien lo tiene. Esto suele ser una fuente de confusión, cuando por ejemplo nuestro programa espera que ingresemos datos por teclado. En estos casos la depuración no podrá continuar hasta que el usuario ingrese los datos, independientemente de lo que se intente hacer dentro de la ventana del entorno de desarrollo o IDE (Integrated Development Environment).

En caso de que la ventana de watches no te figure podes agregarle desde el menú de debug o ir a Debug -> Debugging Windows -> Watches.

Control de Ejecución: En la barra de herramientas del depurador, encontrarás botones para controlar la ejecución del programa. Estos botones te permiten avanzar paso a paso, reanudar la ejecución hasta el próximo punto de interrupción, detener la ejecución por completo, entre otros.

La depuración posibilita la ejecución paso a paso de cada línea, presionando la tecla F7 o desde el menú Debug ► Next line. Si la línea contiene una llamada a función, la misma se ejecuta completamente sin mostrar paso a paso cada una de las instrucciones que hay en ella.

También se puede optar por ejecutar el programa hasta el siguiente punto de interrupción, de modo que el depurador continuará la ejecución del programa hasta que encuentre el próximo Breakpoint o el final del código, seleccionando Debug ► Continue (Ctrl-F7).

Continuar con la siguiente línea de código y hacer paso a paso dentro de una llamada a función, mediante Debug ► Step Into (Shift-F7).

Reanudar la ejecución paso a paso o ejecutar la siguiente sentencia, mediante Debug ►Next Instruction Alt-F7. No es recomendable el uso de ésta última debido a que está diseñada para instrucciones en lenguaje ensamblador o lenguaje de máquina (programación de bajo nivel).

También es posible ejecutar de modo “automático” hasta la posición actual del cursor, mediante Debug ► Run to cursor (F4).

Continuar con la ejecución hasta que finalice la estructura de control actual, mediante Debug►Stepout (Shift-Ctrl-F7). Si actualmente estuviésemos depurando una función, terminaría su ejecución y retornaría al origen de la llamada.

Panel de Llamadas: El panel “Calls” muestra la pila de llamadas, lo que te permite ver las funciones que se han llamado y la ruta que llevó a la ubicación actual del programa.

Gestión de Puntos de Interrupción: Puedes agregar, eliminar y desactivar puntos de interrupción mientras estás en el modo de depuración. Esto te permite concentrarte en áreas específicas del código.

Finalizar la Depuración: Cuando hayas identificado y corregido el problema, puedes finalizar la depuración cerrando la ventana del depurador o haciendo clic en el botón “Detener depuración”.

Recordar que esta es una descripción general de cómo usar el depurador en Code::Blocks para programas escritos en C. Los detalles pueden variar dependiendo de la versión de Code::Blocks que estés utilizando, así como de la configuración específica de tu proyecto.