UC3M

Grado en Ing. Telemática/Sist. Audiovisuales/Sist. de Comunicaciones

Arquitectura de Sistemas

Septiembre 2015 - Enero 2016

Detección de fugas de memoria y depuración

Actividades previas

1. Uso del depurador

Recursos

  • Fichero gdb_use.c en la subcarpeta Debugger de tu carpeta de trabajo compartida. Disponible aquí.

Plan de trabajo

Lee el documento del depurador que se te ofrece como recurso. Haz en una pequeña hoja un resumen de los comandos más importantes. Esta hoja puedes tenerla a lo largo de la asignatura para poder depurar con más agilidad.

Asegúrate de que eres capaz de:

  • Detener un programa en un punto cualquiera del código.

  • Sabes utilizar las funciones de Next y Step.

  • Poner una condición en un punto de parada y verificar que el depurador se detiene sólo si la condición es cierta.

¿Cuánto tiempo has dedicado a esta actividad? mins.

2. Valgrind, detector de fugas de memoria

Recursos

  • Guía rápida de Valgrind (secciones 1,2,3,4,5 y 6).

  • Carpeta con nombre Valgrind_first y fichero testing_valgrind.c en la carpeta compartida de Subversion. Tienes una copia local aquí

Plan de trabajo

Para la detección de fugas de memoria en C vamos a utilizar el framework Valgrind. Este framework tiene un conjunto de herramientas entre las que destaca Memcheck (que será en la que nos centremos), que te permite ejecutar un programa en C y ver si en alguna línea de tu código se puede incurrir en una fuga de memoria o algún otro error, advirtiendo así de posibles problemas en la futura ejecución de tu programa.

  1. Lee la guía rápida de Valgrind que se ofrece como recurso.

  2. Abre un terminal de comandos y compila y ejecuta el programa testing_valgrind.c que encontrarás en el directorio Valgrind_first de tu carpeta compartida. Ejecuta de nuevo el programa utilizando Valgrind y analiza el informe sobre el uso de memoria que imprime.

  3. Modifica el programa testing_valgrind.c para que, la ejecución con Valgrind no muestre error alguno. Súbelo corregido a tu repositorio con Subversion.

¿Cuánto tiempo has dedicado a esta actividad? mins.

3. Errores detectados por Valgrind

Recursos

Plan de trabajo

Vamos a indagar más sobre los posibles errores que detecta Valgrind y, en concreto, con su herramienta Memcheck.

  1. Lee los tipos de errores que Memcheck detecta utilizando el enlace que se ofrece como recurso. Ignora el error denominado Mismatched use of malloc/new/new [] vs free/delete/delete [], pues este sólo se produce en programas escritos en C++.

  2. Lee los tipos de mensajes de error que pueden aparecer al ejecutar tu programa con Valgrind, utilizando el segundo enlace que se te da como recurso.

  3. Cuando termines de leer ambos documentos realiza un resumen (1 página por una cara), a modo de tabla, de manera que incluya el tipo de error, una descripción breve (un par de líneas) de por qué aparece ese error, los posibles mensajes que puede sacar Valgrind, y un código de ejemplo asociado. Puedes ver un ejemplo en la siguiente imagen:

    Haz el resumen con la hoja orientada en horizontal, para que la tabla se vea mejor. Observa que un mismo tipo de error puede tener varios mensajes asociados, como el de la figura del ejemplo, pero también puede ocurrir que varios tipos de error tengan casi siempre los mismos mensajes (como es el caso de los errores que implican una lectura/escritura inválida). Si no sabes cómo rellenar alguna fila o columna de la tabla, déjala en blanco. Podrás rellenarla a medida que trabajas con Valgrind.

¿Cuánto tiempo has dedicado a esta actividad? mins.