Está en la página 1de 9

PRÁCTICA

3
Introducción al
Depurador de Dev-C++

El objetivo de esta práctica es el conocimiento de la herramienta que proporciona Dev-C++


para la corrección de errores de ejecución: el depurador o debugger. Es primordial que al final de esta
sesión el alumno sepa cómo depurar un programa en C++.

1. Utilización del Depurador de Dev-C++

Hemos comentado anteriormente los tipos de errores que podían aparecer durante el desarrollo
de un programa. Unos eran los errores léxicos, los más sencillos de corregir, pues eran detectados por
el propio compilador.

Una vez compilado el programa (eliminados los errores léxicos) pueden seguir apareciendo
fallos durante la ejecución debido a la presencia de errores de ejecución. Estos errores no pueden ser
detectados automáticamente y para su corrección se debe repasar mentalmente, instrucción por
instrucción, la traza del programa. De este modo podemos detectar el fallo, averiguando en qué
momento el comportamiento real del programa se separa del comportamiento esperado.

Los actuales entornos de programación incluyen una herramienta de ayuda para la corrección
de este tipo de errores. Esta herramienta, conocida como depurador o "debugger", facilita el
seguimiento de la traza de ejecución del programa.

1.1.- Cómo trabaja un Depurador.


Básicamente un depurador permite el seguimiento de la traza de un programa al facilitar:

• La ejecución paso a paso de las instrucciones del programa. Tras la ejecución de una instrucción
el entorno devuelve el control del ordenador al programador que puede comprobar cómo se ha
ejecutado la instrucción.
• La monitorización del valor de las variables del programa. Podemos ver cómo cambia el valor de
las variables tras la ejecución de cada instrucción.

25
Fundamentos de Informática. Práctica 3.
Introducción al Depurador de Dev-C++

1.2. El depurador de Dev-C++ .


El depurador de Dev C++ proporciona un conjunto de utilidades para la corrección de errores,
las más importantes son las siguientes:

Colocar un punto de parada

Un punto de parada (breakpoint) obliga a la detención de la ejecución del programa cuando se


alcanza dicho punto. Los puntos de parada son útiles en la depuración, pues permiten al programador
observar el estado del entorno del programa (contenido de variables) en un momento concreto de la
ejecución y no solo al final de la misma. Pero además, Dev-C++ exige colocar al menos un punto de
parada para poder utilizar el resto de herramientas del depurador.
Hay dos formas de activar un punto de parada. La más sencilla es pulsar con el ratón en la
zona del margen junto a la línea en la que queremos situar el punto de parada. Otra forma es situar el
cursor en la línea en que queremos situar el punto de parada y usar el menú Depurar, opción
Añadir/Quitar punto de Ruptura.

Para activar/desactivar un “punto de parada”:

Menú Depurar; opción Añadir/Quitar punto de Ruptura

En cualquiera de los casos, se visualizará la línea con fondo rojo, y un icono rojo con una
especie de 'V' verde en su interior en la zona del margen:

Ejecutar un programa en modo de depuración

De nuevo hay varias formas de hacer esto. Una consiste en pulsar el icono en la barra de
herramientas. El mismo icono está en la parte inferior, en la pestaña de "Depurar", al activar esta

pestaña podemos acceder al icono de "Depurar" , por último, también podemos


hacerlo mediante el menú "Depurar->Depurar", o pulsando la tecla [F8].
26
Fundamentos de Informática. Práctica 3.
Introducción al Depurador de Dev-C++

En cualquier caso, el programa se ejecutará normalmente hasta alcanzar un punto de parada.


En ese momento el control vuelve al entorno de Dev-C++ y se muestra la línea de ejecución actual con
fondo azul y con un icono en forma de flecha en el margen:

Otra variante de punto de parada consiste en situar el cursor en la línea hasta la que queremos

que se ejecute el programa y pulsar "Ir al cursor" . Esto trabaja igual que si
hubiéramos situado un punto de parada en esa línea, y lo borráramos una vez alcanzado. Pero
cuidado, el resto de los puntos de parada siguen activos, si se alcanza uno de ellos antes que la
posición del cursor, el programa parará en ese punto.

Ejecución paso a paso


Es la característica más importante de un depurador: el que se pueda ejecutar una y sólo una
instrucción del programa y que el entorno nos devuelva el control para poder comprobar si los efectos
de esa instrucción son los deseados o no.

Una vez puesto el o los puntos de parada y dada la orden “Depurar”, la ejecución se detiene en
el primer punto de parada. A partir de aquí podemos optar por ejecutar el programa hasta el siguiente
punto de parada, pulsando "Saltar paso", o reanudar la ejecución paso a paso ejecutando la siguiente
sentencia, mediante "Siguiente paso" o “Avanzar paso a paso”.

La diferencia entre "Siguiente paso" y "Avanzar paso a paso" es sutil pero importante. Si la
sentencia contiene una llamada a una función, "Siguiente paso" la ejecutará como una sentencia única,
y "Avanzar paso a paso" transferirá la ejecución al interior de la función y ejecutará sus sentencias paso
a paso.

27
Fundamentos de Informática. Práctica 3.
Introducción al Depurador de Dev-C++

En el momento que entremos en este modo de ejecución aparecerá una barra de color azul
claro en la ventana del programa que nos indicará la instrucción que se va ejecutar la próxima vez

Para ejecutar PASO A PASO:

Menú Depurar y opción Siguiente paso (F7) o Avanzar paso a paso ( Shift+F7 )

Pulsando sucesivamente F7 iremos ejecutando instrucción por instrucción. (NOTA: si hay dos o
más instrucciones en una misma línea, el depurador las ejecutará todas a la vez, pasando a la siguiente
línea con instrucción/es).

Si se desea suspender la ejecución paso a paso, se debe seleccionar en el menú Depurar la


opción Parar ejecución.

Inspeccionar variables: Los "watches"


Un "watch" en Dev-C++ es un representante de una variable que se desea monitorizar. Muestra
el valor de la variable a la que representa. Se debe crear un "watch" para cada variable cuya evolución
desee vigilar.

Para CREAR un "watch":

Menú Depurar; opción Añadir watch (F4)

Aparecerá un cuadro de diálogo en donde escribiremos el nombre de la variable del "watch".


En ese momento aparecerá en la columna de la izquierda la variable observada junto con su valor.
Podemos crear (o eliminar) un "watch" en cualquier momento durante la ejecución del programa.

28
Fundamentos de Informática. Práctica 3.
Introducción al Depurador de Dev-C++

2. Sesión de prácticas

2.1. Primer ejercicio.

Con este ejercicio aprenderás a:

· Utilizar el depurador para realizar la traza de un programa muy simple


· Crear watches para las variables de un programa
· Ejecutar un programa paso a paso.

Con este ejercicio repasarás como:

· Editar un programa
· Compilar un programa.

Para ello describiremos los pasos necesarios, que serán los mismos a seguir cuando se depure
cualquier otro programa. Recomendamos recordarlos para futuras prácticas.

Es preciso que lo completes en su totalidad.

A. Editar el programa a depurar.


Como primer ejemplo elegiremos un programa muy sencillo cuya única utilidad es la de
servirnos de soporte para practicar con el depurador. Es el siguiente:

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
int a, b, c, d;
a=1;
b=2;
c=3;
d=4;
cout<<"a= "<<a<<endl;
cout<<"b= "<<b<<endl;
cout<<"c= "<<c<<endl;
cout<<"d= "<<d<<endl;
for (a=1;a<=5;a++){
cout<<"a= "<<a<<endl;
}
for (b=1;b<=5;b++){cout<<"b= "<<b<<endl;}
system("PAUSE");
return 0;
}

Guárdalo con el nombre P3EJ1.

29
Fundamentos de Informática. Práctica 3.
Introducción al Depurador de Dev-C++

B. Compilar el programa.
Compila el programa, si hubiese errores corrígelos y compila de nuevo.

C.- Ajustar el tamaño de las ventanas

Es conveniente poder visualizar simultáneamente la ventana del editor y la de salida, así que
ajusta el tamaño de ambas y colócalas de forma que no queden superpuestas.

D.- Colocar un punto de parada

Coloca un punto de parada en la línea que contiene la instrucción c=3;

E.- Arranque del modo Paso-a-Paso.

Procede como se explicó en el apartado anterior, recuerda:

Menú Depurar, opción Depurar, o bien botón

Para ejecutar PASO-A-PASO:

Menú Depurar y opción Siguiente paso (F7) o Avanzar paso a paso ( Shift+F7 )

F. Creación de los Watches


Procederemos como se ha explicado anteriormente (punto 1.2) para crear cuatro "watches",
uno para cada variable del programa (normalmente no se crean tantos como variables, pero esto es un
ejemplo).
Aparecerá en la columna de la izquierda cada variable seguida de un símbolo “=” y seguido de
un signo de interrogación si todavía no ha tomado ningún valor o del valor que tiene en ese momento
dentro del programa.
30
Fundamentos de Informática. Práctica 3.
Introducción al Depurador de Dev-C++

G.- Ejecución Paso a Paso


Seguiremos pulsado F7. La barra azul se irá moviendo de línea en línea (instrucción por
instrucción), indicando la instrucción que se dispone a ejecutar. Observa la secuencia de ejecución de
las instrucciones y cómo las variables observadas van tomando valores a medida que se van
ejecutando instrucciones.

2.2. Segundo ejercicio.

Con este ejercicio aprenderás:

· La filosofía de la utilización del depurador para corregir errores de ejecución.

Con este ejercicio repasarás como:

· Recuperar del disco un programa ya creado


· Compilar y ejecutar un programa.
· Crear watches para las variables de un programa
· Ejecutar un programa paso a paso.

Es preciso que lo completes en su totalidad.

El programa es el siguiente:
/* FECHA:
AUTOR: profesores de Fundamentos de Informática
DESCRIPCIÓN:
Calcula el valor de la expresión (x+y)/(x-y)
ENTRADAS: las variables x e y.
SALIDAS: el resultado de la expresión
ERRORES:
El programa presenta un error de ejecución debido a que una instrucción
ha sido mal introducida. El objetivo del ejercicio es encontrar esta
instrucción con ayuda del depurador.
*/
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
int x,y; /*variables de entrada*/
int a; /*almacenar la suma de x e y*/
int b; /*almacenar la diferencia de x e y*/
float resultado;

cout << endl << “Introduce x ";


cin >> x;
cout << endl << "Introduce y ";
cin >> y;

a=x+y;
b=x-x;
resultado=a/b;
cout << endl <<" La expresión vale " << resultado;

system(“PAUSE”);
return 0;
}

31
Fundamentos de Informática. Práctica 3.
Introducción al Depurador de Dev-C++

A. Recuperar del disco el fichero con el programa.


El programa se encuentra en el directorio P3 y se llama P3EJ2.cpp

B. Compilar y ejecutar el programa.


Tras la ejecución de las instrucciones de entrada de datos podrás ver que el programa presenta
un error de ejecución debido a que existe una instrucción que, aunque es correcta sintácticamente, ha
sido mal programada.

C. Filosofía del empleo del depurador.


El depurador es una herramienta de ayuda a la corrección de errores de ejecución o de diseño.
Se utiliza cuando el programa se ha compilado sin ningún error y, sin embargo, la ejecución presenta
errores o bien el comportamiento del programa no es el esperado.

Hay que dejar bien claro que el depurador es una ayuda. Por si mismo no es capaz de detectar
ningún error. De hecho no los detecta; únicamente nos facilita su detección. Esta sigue siendo una labor
propia del programador. Incluso puede ocurrir que ni siquiera con la ayuda del depurador seamos
capaces de localizar el error.

Una vez que se sabe que nuestro programa se comporta erróneamente utilizaremos el
depurador para vigilar la evolución del valor de las variables. Ejecutaremos el programa paso-a-paso
preguntándonos antes de ejecutar cada instrucción cual debe ser su efecto particular y su adecuación
al objetivo final del programa. Tras ejecutar la instrucción podremos saber, viendo el valor de las
variables modificadas, si sus efectos han sido correctos o incorrectos. De esta manera es posible acotar
el error hasta localizar la instrucción o instrucciones erróneas.

D. Depurar el programa
1. Crear watches para las variables del programa, ajustar el tamaño y disposición de las ventanas y
arrancar la ejecución paso-a-paso.

2. Comparación entre el comportamiento esperado y el real:

La ejecución ha de comenzar con las instrucciones correspondientes a la lectura de las


variables x e y. Introducimos 4 como valor de x y 2 como valor de y.

Tras comenzar de nuevo la ejecución paso a paso, y la lectura correcta de los datos, se ha de
calcular el valor de la suma de x e y (almacenándose en a) y de su diferencia (almacenándose en b). La
variable a debe tomar el valor 6 y b el valor 2. Al efectuar la instrucción de la línea 28 se asigna el valor
6 a la variable a pero la instrucción de la línea 29 asigna el valor 0 a la variable b, en vez de 2. Esta
situación es la que provoca el error ya que después se trata de dividir a entre b, produciéndose el error
de división por cero. Por tanto, la instrucción que se ha separado de su comportamiento esperado es la
de la línea 29. Es ahí donde está el error.

Si comprobamos la instrucción vemos que en vez de calcular la diferencia de x e y, lo que


aparece es la diferencia de x con x. La instrucción está mal escrita. Debería aparecer:

b = x - y;

Como ves el depurador realmente no descubre cuál es el error, solamente da pistas para ello.

32
Fundamentos de Informática. Práctica 3.
Introducción al Depurador de Dev-C++

E. Corregir el error y volver a ejecutar.

2.3. Tercer programa

Con este ejercicio repasarás como:

· Editar y grabar un programa en C++


· Compilar y ejecutar un programa.
· Crear watches para las variables de un programa.
· Ejecutar un programa paso a paso.

Utilizando el depurador debes averiguar qué es lo que hace este programa:

/* FECHA:
AUTOR: profesores de Fundamentos de Informática
DESCRIPCIÓN:
???
ENTRADAS: la variable n.
SALIDAS: f, el resultado de la expresión
ERRORES:
El programa funcionará erróneamente si el número n es negativo.*/

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
int n,i;
long f;

cout << endl << ”Introduce el nº ? ");


cin >> n;

i=1;
f=1;

while (i <= n)
{
f=f*i;
i=i+1; /*modifica la condición */
}
cout <<endl << f <<endl;

system(“PAUSE”);
return 0;
}

PISTA: vigila la evolución del valor de la variable f. Se trata de un operador matemático.

33

También podría gustarte