Strumenti Utente

Strumenti Sito


fisica:informatica:201718:esercitazioni:esercitazionedeb

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

fisica:informatica:201718:esercitazioni:esercitazionedeb [12/03/2018 alle 11:55 (7 anni fa)] – creata Susanna Pelagattifisica:informatica:201718:esercitazioni:esercitazionedeb [12/03/2018 alle 12:01 (7 anni fa)] (versione attuale) Susanna Pelagatti
Linea 106: Linea 106:
 </code> </code>
  
 +===== Esercizio 3: (avanzato) Verificare i memory leak con ''mtrace'' (solo per chi ha mcheck.h/mtrace già installato) =====
 +Con riferimento al main sviluppato per l'esercizio precedente verificare che tutta la memoria allocata venga deallocata prima dell'uscita dal main().
 +
 +Per la verifica si utilizzi 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. Ad esempio se il mio file si chiama ''main.c'' posso compilare con
 +<code bash>
 +bash$ gcc -Wall -pedantic -g -o prova main.c 
 +</code>
 +  * settare la variabile di ambiente ''MALLOC_TRACE'' al path del file in cui vogliamo che la ''mtrace()'' registri le informazioni sugli accessi di memoria. Ad esempio se voglio registrare le informazioni nel file ''./mtrace.out'' devo usare il comando
 +<code bash>
 +bash$ export MALLOC_TRACE=./mtrace.out
 +</code>
 +  * eseguire, nel nostro esempio con:
 +<code bash>
 +bash$ ./prova
 +</code>
 +  * dopo l'esecuzione nel file ''./mtrace.out'' sono registrati gli accessi in formato testuale non facilmente comprensibile. Interpretarlo con l'utility mtrace. Ad esempio sempre riferendosi al nostro esempio invocare
 +<code bash>
 +bash$ mtrace ./prova ./mtrace.out 
 +</code>
 +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 4: (avanzato) verificare gli accessi in memoria: valgrind =====
 +
 +Verificare la correttezza degli accessi ai puntatori dello heap compiuti dalle funzioni su liste sviluppate negli esercizi precedenti 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 ''-g'' per includere le informazioni di debugging. Ad esempio se il mio file si chiama ''main.c'' posso compilare con
 +<code bash>
 +bash$ gcc -Wall -pedantic -g -o prova main.c
 +</code>
 +  * eseguire
 +<code bash>
 +bash$ valgrind ./prova
 +</code>
 +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.
 +
 +''valgrind'' contiene moltissime opzioni, invitiamo gli studenti interessati ad esplorarle partendo dal[[http://valgrind.org/|sito]].
fisica/informatica/201718/esercitazioni/esercitazionedeb.1520855740.txt.gz · Ultima modifica: 12/03/2018 alle 11:55 (7 anni fa) da Susanna Pelagatti

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki