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
-gper includere le informazioni di debugging. - settare la variabile di ambiente
MALLOC_TRACEal 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.outdevo usare il comando
bash$ export MALLOC_TRACE="./mtrace.out"
- eseguire il programma
- dopo l'esecuzione nel file
./mtrace.outsono 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.
Esercizio 2: verificare gli accessi in memoria con valgrind
Verificare la correttezza degli accessi in memoria degli esercizi dell'Assegnamento1 utilizzando valgrind.
Questo strumento permette fra l'altro di capire se tutte le variabili sono inizializzate prima del loro uso, se accediamo a memoria gia' deallocata o mai allocata e situazioni similari
Per fare questo procedere come segue:
- compilare il file da verificare con opzione
-gper includere le informazioni di debugging. - eseguire il programma con
valgrind:
bash$ valgrind ./prova
in questo modo, a schermo verranno riportare le infrazioni rilevate. Ad esempio, invalid read o invalid write sono accessi in lettura o scrittura a memoria non allocata o gia' deallocata.
