Tabla de contenidos
Fichero gdb_use.c
en la subcarpeta
Debugger
de tu carpeta de trabajo
compartida. Disponible aquí.
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.
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í
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.
Lee la guía rápida de Valgrind que se ofrece como recurso.
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.
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.
Tipos de errores que detecta la herramienta Memcheck de Valgrind (Sección 4.1. del manual de usuario).
Clasificación de los mensajes de error que imprime Memcheck (Sección 4.2. del manual de usuario).
Vamos a indagar más sobre los posibles errores que detecta Valgrind y, en concreto, con su herramienta Memcheck.
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++.
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.
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.