Questa è una vecchia versione del documento!
Indice
Esercitazione 2
Ancora esercizi su C e su libreria standard di IO. Tool: mtrace e valgrind.
Cercare di completare tutti gli esercizi durante le ore di laboratorio e nel caso come homework.
Esercizio 0: esperienza su preprocessing, compilazione e linking
Seguire l'esempio dei lucidi di proprocessing, compilazione e linking verificando i vari passi con i comandi nm
, objdump
o readelf
ed ldd
.
Vedere i manuali in linea dei comandi.
Esercizio 1: utilizzo di mtrace
Verificare gli accessi in memoria compiuti dalle funzioni scritte per l'esercizio n. 7 dell'Assegnamento1 (costruzione di binaryTree) utilizzando la funzione mtrace
e l'utility mtrace
, questi strumenti tracciano le azioni di allocazione e deallocazione di memoria compiute dal programma per verificare la presenza di memory leak cioe' memoria non deallocata.
Per fare questo procedere come segue:
- leggere le informazioni in
man 3 mtrace
- includere l'header
mcheck.h
- inserire la chiamata alla funzione di libreria mtrace() all'inizio della parte del programma C che vogliamo verificare
- inserire la chiamata alla funzione di libreria muntrace() alla fine della parte del programma C che vogliamo verificare
- compilare il file da verificare con opzione
-g
per includere le informazioni di debugging. - settare la variabile di ambiente
MALLOC_TRACE
al path del file in cui vogliamo che lamtrace()
registri le informazioni sugli accessi di memoria. Ad esempio se voglio registrare le informazioni nel file./mtrace.out
devo usare il comando
bash$ export MALLOC_TRACE="./mtrace.out"
- eseguire il programma
- dopo l'esecuzione nel file
./mtrace.out
sono registrati gli accessi in formato testuale non facilmente comprensibile. Interpretarlo utilizzando l'utility mtrace, ad esempio:
bash$ mtrace ./myprog ${MALLOC_TRACE}
questo rispondera' No memory leaks
se tutta la memoria e' stata deallocata o fornira' indicazioni su dove e' stata allocata la mamoria rimasta da deallocare.