Visual C++. Utilizar el depurador.

  1. Ejecutar en modo depuración.

  2. Puntos de interrupción.

  3. Ejecución paso a paso.

  4. Ventanas de depuración.

  5. Cuadros de mensajes y macros.

  6. Uso de afirmaciones.


 

La depuración de un programa, es el proceso de corrección o modificación del código para comprobar su correcto funcionamiento. Visual C++ incluye una amplia variedad de herramientas para ayudar en la tarea de búsqueda de errores en el código. Veamos algunas de estas herramientas.

  1. Ejecutar en modo depuración.

  2. Para poder utilizar el depurador correctamente durante el proceso de ejecución de un programa, hay que ejecutar dicho programa desde el Visual, en modo ‘Debug’. Esto se hace desde el menú Build/Star Debug/ Go. O bien con la tecla F5, o utilizando el botón de ejecutar en modo debug:

  3. Puntos de interrupción (Breakpoints).
  4. Sirven para detener el programa en una línea de código, y poder examinar el valor de las variables, o ejecutar el programa paso a paso.


    Se insertan con la tecla F9 o bien con el  botón:

    Para obtener un mayor control de los puntos de interrupción se pueden configurar desde el menú Edit/Breakpoints, donde podemos activarlos para que interrumpan el programa en una posición determinada (Location breakpoints) o cuando un valor cambia (Data breakpoints), o bien cuando una ventana recibe un mensaje (Message Breakpoint).

  5. Ejecución paso a paso.
  6. Una vez puesto un punto de interrupción, podemos ejecutar el programa línea a línea, para comprobar su correcto funcionamiento.

    Cuando empezamos a ejecutar un programa en modo depuración, aparece una barra de herramientas nueva, y el menú Build cambia por el menú Debug. Desde este menú y esta barra, podemos ejecutar el programa paso a paso, y abrir las ventanas de depuración que necesitemos.


     

     

    Para ejecutar paso a paso el programa, podemos utilizar las funciones Step Into, Step Over, Step Out y Run to Cursor, que nos permiten respectivamente:

    Step Into (F11): ejecuta la siguiente línea de código. Si esa línea es una llamada a otra función, el programa entrará en esa función.

    Step Over (F10): igual que la anterior, pero si la siguiente línea es una función, la ejecuta sin entrar en ella.

    Step Out (May+F11): sale de la función actual.

    Run to Cursor (Ctrl+F10): estable un breakpoint instantánea en la línea en la que situemos el cursor.

  7. Ventanas de depuración.
  8. Para ver los valores de las variables, podemos utilizar las ventanas de depuración. Estas ventanas son las siguientes. Algunas de éstas ventanas se abren directamente cuando iniciamos la ejecución. Si esto no ocurre, podemos abrirlas desde el menú desplegable contextual que aparece al pulsar el botón derecho del ratón en un área vacía de las barras de herramientas, o desde la barra de botones de Debug.

    Ventana de variables (Variables Window).

    Muestra las variables definidas dentro de la función acutal. contiene tres carpetas: Auto, Locals y This. Auto muestra las variables que el programa usa en la línea actual y en la anterior. Locals muestra las variables definidas en la función actual. Y this muestra el objeto al que el puntero ‘this’ señala en ese momento.


     

    Ventana de observación (Watch Window).

    Nos permite ver los valores de las variables que deseemos. Introduciendo el nombre de la varible en la parte izquierda, aparecerá su valor en la derecha.


     

    Estas dos ventanas son las que más se utilizan. Tenemos también ventanas para ver los valore sde los registros del procesador (Registers window), para ver los contenidos de las direcciones de memoria que se están depurando (Memory window), para ver la pila de llamadas (Call Stack window) y por último la ventana de desensambaldo (Disassembly window).

  9. Cuadros de mensajes y macros.
  10. Otras técnicas que podemos utilizar para depurar nuestro programa es el usa de cuadros de mensaje y las macros TRACE, TRACE0, TRACE1,TRACE2 y TRACE3.

    El cuadro de mensaje nos permite abrir una ventana que nos muestra un texto durante la ejecución, sin necesidad de interrumpir la ejecución.

    Para ello llamamos a la función AfxMessageBox, pasándole como parámetro el texto que queremos que muestre.

    Las macros TRACE, nos permiten imprimir texto y variables en la ventana Debug, mientras ejecutamos el programa. Su sintaxis es similara a la de la función de C printf.

    TRACE0, permite imprimir un texto, sin ninguna variable:

    TRACE0( "Muestro en la ventana este texto: " );

    El resto de macros, imprimen tantas variables como su número final indica, con idéntica sintaxis a printf. Por ejemplo:

    TRACE1( "Integer = %d\n", i );

    TRACE2( "Integer = %d, String = %s\n", i, sz );

  11. Uso de afirmaciones (ASSERT).
  12. Con la macro ASSERT, podemos interrupmpir la ejecución de una aplicción cuando no se cumple una condición especificada. Por ejemplo:

    ASSERT(x = = 0);

    detendrá la ejecución cuando x tenga un valor distinto de cero.