Tabla de contenidos
Documento El programa depurador o debugger
Carpeta Music_data
en tu espacio
compartido de Subversion.
Tienes una copia local aquí.
El programa my_music.c
almacena
información sobre una colección de discos tal y como se muestra en la
siguiente figura.
Las variables globales rap
,
rock
y rumba
son estructuras
de tipo Category
con el número de
discos y una lista encadenada de ellos. Cada disco es una estructura con
el número de canciones, un array de información sobre cada canción y el
puntero al siguiente disco. La información de una canción es su duración
y un puntero al título.
El programa (ver función main
)
primero imprime el número de discos para
cada categoría, luego la duración de todas las canciones de una
categoría (mediante la función Duration
), y finalmente el
título de la última cación de cada disco en cada categoría mediante la
función print_title_last_track_in_each_disk
.
Puedes ignorar las funciones estáticas del fichero. Son correctas y lo único que hacen es cargar y descargar los datos en la estructura.
Compila y ejecuta el programa
my_music.c
(recuerda compilarlo con la opción
-g
). Contiene tres errores. Debido a ellos, verás que los
mensajes que imprime por pantalla son incorrectos. Por ejemplo, la duración de los
discos de la categoría “rap” es incorrecta, y los mensajes
que muestran el título de la última pista de cada disco son
incorrectos.
Utilizando el depurador, analiza la ejecución y arréglalos
(igual es conveniente hacerte una copia del programa, para volver al fichero
original si lo necesitas).
Para ello, puedes localizar las tres variables globales y las dos funciones
Duration
y
print_title_last_track_in_each_disk
. Con el depurador vete
hasta que se imprime la duración de la colección de rap y ejecuta paso a
paso cómo se calcula. Repite el procedimiento para la primera llamada a
la función print_title_last_track_in_each_disk
.
Recuerda que las funciones estáticas del fichero son correctas y lo único que hacen es cargar y descargar los datos en la estructura.
La forma de saber si la ejecución es la correcta es porque la salida del programa debe ser (presta atención a la última línea):
--- Welcome to the Music Statistics program --- Analyzing your music collection... 2 disks in the rumba category 2 disks in the rock category 1 disks in the rap category Duration of rumba songs: 6019 Duration of rock songs: 7044 Duration of rap songs: 4639 Duration of all songs: 17702 Title of last track in rumba disks: Disk 1: vestido de flores Disk 2: nina Title of last track in rock disks: Disk 1: god save the queen Disk 2: now im here Title of last track in rap disks: Disk 1: curtains close skit --- PROGRAM IS FIXED! COMMIT YOUR CHANGES ---
Opcionalmente, sube el código al SVN y/o enséñaselo al profesor. Es conveniente que vayas apuntando los pasos para explicarle al profesor cómo has solucionado los errores y de qué manera te ha ayudado a hacerlo el depurador. El profesor además puede comprobar que has entendido el manejo del depurador con algunas preguntas.
En esta actividad vamos a ejecutar ficheros que
contienen errores de codificación en Valgrind. Estos ficheros se encuentran bajo el directorio
Valgrind_errors
en vuestro repositorio (con copia local
aquí).
Para cada uno de
los ficheros siguientes, compila con la directiva -g
(gcc -Wall -g tufichero.c -o tuejecutable), ejecútalo con
Valgrind (valgrind --leak-check=yes ./tuejecutable) y
corrige los errores aparecidos, explicando en el mismo fichero (una pequeña
explicación de un par de líneas encerrada entre comentarios) qué error se estaba produciendo.
Fichero strcpy_exercise.c
: copia
una cadena de caracteres en otra.
Fichero printing_exercise.c
: copia
el valor de un entero a un puntero e imprime la dirección de dicho
puntero y su valor recién copiado.
Optionally, subid los ficheros modificados mediante SVN y enséñaselos al profesor para que pueda evaluarlos.
Programa en el que se implementa un menú con varias opciones.
Para autocomprobar tu código, puedes usar:
test_menu_operations_array_pointer_es.sh
Partiendo del programa del menú para mostrar información de redes inalámbricas, realiza las siguientes modificaciones:
Cambia la definición de la tabla que almacena las redes
inalámbricas en la función main
. Cada elemento de la tabla
será un puntero a un dato de tipo struct ap_scan_info
.
Adapta las funciones del programa (array_load
y demás) para
que funcionen con el nuevo tipo de dato de la tabla.
Opcionalmente, sube el fichero al repositorio con svn
commit
.
Ahora es tiempo de que intentes mejorar la funcionalidad de tu menú Wifi con dos funciones especiales que harán más sencilla la aplicación diseñada:
Función de [5] mostrar las mejores Wifis. Presentará las Wifis de forma ordenada, de tal manera que la de mejor energía aparecerá primero.
Función de [6] borrado de Wifi. Esta marcará una Wifi como no disponible. Tras borrar la Wifi esta ya nunca volverá a aparecer.