Documentos de Académico
Documentos de Profesional
Documentos de Cultura
3
Introducción al
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.
• 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++
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:
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
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.
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
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).
28
Fundamentos de Informática. Práctica 3.
Introducción al Depurador de Dev-C++
2. Sesión de prácticas
· 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.
#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;
}
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.
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.
Menú Depurar y opción Siguiente paso (F7) o Avanzar paso a paso ( Shift+F7 )
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;
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++
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.
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.
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++
/* 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;
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;
}
33