PDF de programación - Práctica 3. Depuración de programas.

Imágen de pdf Práctica 3. Depuración de programas.

Práctica 3. Depuración de programas.gráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 28 de Noviembre del 2017)
768 visualizaciones desde el 28 de Noviembre del 2017
2,1 MB
13 paginas
Creado hace 7a (23/09/2016)
INFORMÁTICA

Práctica 3.

Depuración de programas.

Grado en Ingeniería en Electrónica y Automática Industrial
Curso 2016-2017
v2.2 (23.09.16)


























Depuración.

Es bastante frecuente que los programas contengan errores de diseño o de programación, por lo que
una herramienta imprescindible es el depurador. El depurador permite ejecutar un programa paso a
paso (instrucción a instrucción) y analizar el valor de las variables en cada momento, para ver en qué
momento la ejecución se separa de lo previsto. Es pertinente recordar aquí la máxima:


“Un programa hace lo que dices, no lo que quieres”.


El depurador que vamos a utilzar se llama Data Display Debugger (o ddd). Se puede arrancar desde
el escritorio, o desde un interfaz de comandos, tecleando:

bash-ln.05$ ddd muestra&

La ventana del depurador será parecida a lo que se ve en la siguiente figura:




Una vez cargado el programa, lo primero es ponerlo en marcha. Para ello, se pone un punto de
parada (‘breakpoint’) en una línea del mismo (por ejemplo, en el primer printf) haciendo click en
la línea en la que se encuentra, al principio. Eso llevará el cursor a esa posición. A continuación se
pulsa el botón ‘Break’ de la barra de herramientas. Para desactivarlo, basta con volver a pulsar el



2


9$22$%&'%%
:'22$4)'#0$*%




















!"#$%&'%%
()*+$,)-$.)/#%
&'%&$0"*%







5'#0$#$%&'%%
."#02",%&'%,$%%
'6'.+.)/#%



!"#$%&'%%
()*+$,)-$.)/#%
&',%12"32$4$%







7#0'28$-%&'%%
."4$#&"*%







botón ‘Break’. Una vez puesto el punto de parada, se echa a correr el programa pulsando el botón
‘Run’ de la ventana de control de la ejecución. El programa se parará en la línea para la que hemos
creado un punto de parada.

Es posible ver el valor de variables seleccionándolas con el ratón (haciendo click sobre ellas en la
zona de visualización de programa) y, a continuación, pulsando el botón ‘Display’. Eso hará que
aparezcan en la zona de visualización de datos, y se vayan mostrando los valores que van tomando.

Para ejecutar una línea del programa, se pulsa bien el botón ‘Step’, bien el botón ‘Next’, ambos en la
ventana de control de la ejecución. La diferencia entre ambos radica en el tratamiento de las
funciones. Cuando se llega a una función, ‘Next’ ejecuta toda las instrucciones de la función de una
vez, es decir, con una única pulsación del botón, mientras que cada pulsación de ‘Step’ejecuta una
única instrucción de la función.

Además, es posible saltarse zonas completas de código simplemente poniendo un punto de parada
en la instrucción donde termina la zona que nos queremos saltar, y echando a correr el programa con
el botón ‘Cont’. La ventana de control de la ejecución tiene otras opciones que es interesante
explorar. Para ello, consultar la bibliografía de esta práctica, situada al final de este cuaderno.

Utilización de ddd para depurar un programa.

En esta sección se muestra cómo utilizar ddd para encontrar los errores de un programa. El punto de
partida es el siguiente programa:








3

Se pretende que realice la conversión de una temperatura expresada en grados Fahrenheit, contenida
en la variable fahren, a grados Celsius, y la muestre por pantalla. Si se compila y ejecuta, el
resultado es el siguiente:





Como se puede comprobar, no es el correcto, ya que 100ºF no son 0ºC, por lo que el programa no
funciona bien. Para encontrar los errores, lo primero es lanzar el depurador. En la siguiente imagen,
se han puesto dos puntos de parada, uno en la primera sentencia del programa, y otro justo en la
llamada a la función printf que muestra los resultados. Además, se visualiza el valor de las
variables fahren y celsius. Las instrucciones para hacer todo esto se encuentran más arriba en
este documento.

El programa se ha dejado correr hasta el segundo punto de parada, y se puede ver que la variable
celsius, que es la que se muestra, contiene el valor 0, por lo que la función printf está
funcionando correctamente. El problema ya salta a la vista: los cálculos de la conversión se realizan
con la variable temp, y el valor final no se traslada a la variable celsius, que, por lo tanto,
mantiene su valor inicial.




4



Para saber si la variable temp contiene el valor correcto, y al menos la conversión se ha realizado
correctamente, se visualiza su valor en el depurador:





5



El valor que adquiere, 337.777771, no es el correcto, luego en la conversión de la temperatura hay
otro error. Se puede depurar el proceso de conversión reiniciando la ejecución del programa (botón
'Run'), y poniendo puntos de parada en cada sentencia de la conversión. Esto no es estrictamente
necesario, ya que se puede ejecutar sentencia a sentencia con el botón 'Step'. Ambos métodos son
igual de válidos.






6


Se puede ir ejecutando el programa para comprobar el proceso de conversión de Fahrenheit a
Celsius. Si se usan puntos de parada, para pasar de cada uno al siguiente, se debe pulsar el botón
'Cont'. La siguiente captura muestra uno de los pasos intermedios de este proceso.





7


En algún momento de la ejecución, el programador atento se dará cuenta de que la conversión de
Fahrenheit a Celsius no es la correcta. La conversión correcta se muestra en la primera figura de esta
práctica, en concreto:

celsius=5*(fahren-32)/9;




La siguiente figura muestra el código con la conversión correcta y la asignación de la variable temp
a la variable celsius, para que se muestre el valor correcto por pantalla al llamar a la función
printf.



8


Si se compila y ejecuta este programa, el resultado de la ejecución es el correcto. La siguiente figura
muestra el resultado de la depuración. Se puede ver, en el panel del interfaz de comandos (el de
abajo del todo), el volcado de pantalla de la función printf, con el valor correcto. Esto es lo que
se vería en la ventana del interfaz de comandos si se ejecutara el programa directamente desde el
prompt. Además, las variables fahren y celsius tienen los valores adecuados.





9


A continuación, precisamente la ventana del interfaz de comandos con la invocación al programa, y
el resultado correcto.





10











11


Código:



Código:


#include <stdio.h>

int main()
{














}



int var1, var2;
var1=10;
var2=5;
if (var1>=var2)

else


if(var1=var2)

return 0;

enteros.

printf(“\nLa variable mayor tiene el valor: %d”,var2);
printf(“\nLa variable mayor tiene el valor: %d”,var1);

printf(“\nAmbas variables valen lo mismo: %d\n”,var1);

EJERCICIOS.

Encontrar los errores en los siguientes programas:

Programa 1: El programa debe comparar dos variables y mostrar por pantalla la mayor de ellas. En

caso de que sean iguales, además, debe indicarlo.

Programa 2: El programa debe calcular la media aritmética de los valores de un array de números

int lista[10]= {3,5,2,1,6,2,3,1,5,9};
int suma,i,j;
float media;

for(i=1;i<=10;i++)


media=suma/2;
printf(“\nLa media aritmética de la lista es: %f\n”,media);

suma=suma+lista[j];

#include <stdio.h>

int main()
{













}


return 0;



12







Programa 3: El programa debe crear un array de números enteros a partir de otro dado, de forma
que, en cada posición del nuevo array se almacene la suma de todos los elementos del
array antiguo hasta esa posición inclusive.


Ejemplo:
si el array original es



el nuevo array sería:




Código:

{2,1,4,7,2}
{2,3(2+1),7(2+1+4),14(2+1+4+7),16(2+1+4+7+2)}

#include <stdio.h>

int main()
{













}

int original[10]= {3,5,2,1,6,2,3,1,5,9};
int nuevo[10];
int suma,i,j;

printf(“\nOriginal\tNuevo\n”);
for(i=1;i<=10;i++)





return 0;

printf(“%d\t”,original[i]);
suma=suma+original[i];
printf(“%d\n”,suma);
nuevo[i]=suma;







Bibliografía.








• Tutorial de ddd en castellano: http://www.linuxfocus.org/Castellano/January1998/article20.html
• Manual (en inglés): http://www.gnu.org/software/ddd/manual/pdf/ddd.pdf

13
  • Links de descarga
http://lwp-l.com/pdf7740

Comentarios de: Práctica 3. Depuración de programas. (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad