otra práctica muy guiada

Anuncio
Funciones básicas del depurador
Con frecuencia, los alumnos piensan que cuando su programa no tiene errores de compilación (está correctamente escrito) entonces ya es correcto. Muchas veces esto no es así. Es
más, en la mayoría de los casos, al ejecutar el programa por primera vez se produce algún
fallo, que llamamos fallos de ejecución. A pesar de que el programa está bien escrito, no
hace lo que tenía que hacer y el resultado es incorrecto. Empieza entonces una de las tareas
más difíciles para los programadores primerizos: identificar y subsanar los errores de ejecución. Para realizar esta tarea, el depurador (debugger) es una ayuda inestimable. En esta
práctica aprenderás algunas de las funcionalidades más básicas.
Al finalizar esta práctica serás capaz de:
Ejecutar un programa paso a paso
Establecer y eliminar puntos de parada, y ejecutar un programa hasta el siguiente
punto de parada
Observar el valor de las variables de tu programa durante la ejecución
Como en prácticas anteriores, lo ideal es tener abierto en la pantalla del ordenador el documento que contiene este guión, e ir realizando en secuencia cada uno de los pasos. Es posible que debas consultar de vez en cuando el manual de Dev-C++ (en particular, la parte que
habla de la depuración.
Paso 1
Crea una carpeta en la unidad C: del ordenador, en la que trabajaras durante esta práctica.
Paso 2
Crea un proyecto a partir del siguiente código en lenguaje C (si tienes abierto este documento en pantalla, te resultará cómodo hacer copy y paste).
/* Este programa calcula el mayor de cuatro numeros */
void main ()
{
int a=10, b=5, c=15, d=21;
int mayor1, mayor2, mayor;
if (a > b)
mayor1 = a;
else
mayor1 = b;
if (c > d)
mayor2 = c;
else
mayor2 = d;
if (mayor1 > mayor2)
mayor = mayor1;
else
mayor = mayor2;
}
1
Para calcular el mayor de los cuatro números, el programa calcula el mayor de los dos primeros (y lo deja en mayor1) calcula el mayor de los dos siguientes (y lo deja en mayor2), y
después compara los “ganadores” para seleccionar el mayor de todos que dejará en mayor.
Observa que las variables iniciales a, b, c y d han sido inicializadas con constantes en la
propia declaración de variables.
Paso 3
Compila y monta el programa, y déjalo listo para ejecutar. Si lo ejecutas ahora no veras nada porque el programa no escribe nada en pantalla. Eso tiene fácil arreglo porque basta añadir al final una sentencia para escribir en pantalla el valor de la variable mayor. Pero eso lo
dejamos para luego.
Paso 4
En primer lugar tienes que comprobar que está activada la opción de generar información de
depuración. Vete a Proyecto/Opciones del proyecto/Parámetros y comprueba que en la ventana del compilador aparecen las opciones:
_DEBUG
D DEBUG
D _DEBUG
Si no es así, inclúyelas y pulsa Aceptar. Una vez hecho esto estamos preparados para utilizar
el depurador de Dev-C++.
Paso 5
Correr tu programa en el depurador es fácil. Simplemente ve al menú Depurar y haz clic en
Depurar
(o presiona F8). Si no tienes establecida la información para poder depurar en tu
proyecto, Dev-C++ te pedirá si quieres reconstruir tu proyecto con dicha información activada. En ese caso comprueba que has realizado correctamente el paso 4. Si todo está correcto,
el depurador ha cargado ahora tu programa y lo ejecuta, pero antes debes aprender a controlar varios aspectos del depurador:
•
Estableciendo puntos de ruptura en tu código
2
•
Ejecución paso a paso de tu código
•
Mostrando el valor de las variables y miembros de clases y estructuras
•
Retroseguimiento
•
Usando la ventana del CPU (procesador)
Paso 6: estableciendo Puntos de Ruptura en tu código
Puedes usar Puntos de Ruptura para pausar tu programa en cierta instrucción (línea de código). Para añadir un Punto de Ruptura, selecciona primero la línea de código donde quieres
parar. Ahora haz clic en el menú Depurar y luego en Añadir / Quitar Punto de Ruptura (o pulsando Ctrl+F5). Haciendo clic en la barra en el margen izquierdo del editor a la altura de la
línea tendrá el mismo efecto que los pasos anteriores:
Cuando cargue el depurador, si tu programa ejecuta la línea de código con el Punto de Ruptura, Dev-C++ te avisará que se ha llegado a la línea cambiándola el color del fondo a azul:
Ahora puedes examinar los datos en tu programa o ejecutar paso a paso tu programa.
Paso 7: ejecución paso a paso de tu programa
Una vez que se llegue a un Punto de Ruptura, puedes saltar pasos en tu programa de las distintas formas siguientes:
Siguiente Paso
(o presionando F7) : El depurador dará un paso a la siguiente
instrucción (línea de código) en tu programa.
Avanzar Paso a Paso (o presionando Shit+F7) : El depurador saltará una instrucción. Si esa instrucción es una llamada a una función saltará a ella.
Saltar Paso
(o presionando Ctrl+F7) : El depurador continuará la ejecución del
programa hasta que haya un Punto de Ruptura o el Final del código.
3
Paso 8: Mostrando valores de variables y miembros de clases y estructuras
Depurar es interesante también por la posibilidad de mostrar el valor de las variables observadas en un determinado instante. Dev-C++ te permite ver en una conveniente manera, los
contenidos de tus clases, cadenas, estructuras/uniones, arrays y otras variables, en el Explorador de Depuración de Variables, como el ejemplo mostrado en la figura:
Puedes observar tus variables (cuando se llega a un punto de ruptura) de dos formas distintas:
Haciendo clic en el botón Añadir Watch
(o presionando F4), y escribiendo el nom-
bre de la variable en el diálogo, y presionando Aceptar. Si seleccionas una palabra
en el código fuente y presionas F4, se añadirá la variable observada sin preguntar
por el nombre.
Apuntando con el ratón sobre una variable en tu código fuente si la opción Observar
la variable seleccionada (apuntada por el ratón) está activada en Opciones del Entorno y se añadirá a la lista de variables observadas.
Paso 9
Haz varias ejecuciones del programa modificando los valores iniciales de las variables a, b,
c y d, y verifica, mediante una ejecución paso a paso, que el programa siempre hace el camino correcto. Ten presente que cada vez que cambies los valores iniciales de las variables
tendrás que volver a compilar y montar el programa.
Paso 10
Modifica el programa para que los valores iniciales de las variables se introduzcan por teclado
(añadiendo las sentencias scanf necesarias), y para que el resultado se escriba en pantalla
(mediante una sentencia printf). No olvides hacer el #include de la librería necesaria.
Paso 11
Ejecuta paso a paso la nueva versión del programa. Observarás que llega un momento en
que por más que pulses F7, el programa no avanza. Se ha quedado “atascado” en la primera
sentencia scanf. El programa ha abierto una ventana de DOS y está esperando a que introduzcas el valor que debe leer. Localiza esa ventana e introduce el valor, y verás como el
programa avanza a la siguiente sentencia.
4
Paso 12
Pulsa F8 una vez más para entrar en modo ejecución paso a paso, y añade (con la opción
añadir watch o las alternativas vistas anteriormente) los nombres de las variables mayor1,
mayor2 y mayor (una variable en cada línea).
Puedes observar que en el caso de mayor2 aparece un valor extraño, que es el valor que tiene inicialmente la variable, antes de ser inicializada (por eso no debemos usar nunca el valor
de una variable que no haya sido inicializada convenientemente).
Si prosigues ahora la ejecución paso a paso, observarás que en la ventana “Depurar” se
muestran los cambios que van produciéndose en los contenidos de las variables.
5
Descargar