Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

5.3. Come usare Valgrind per una analisi sull'uso della memoria

Valgrind è un framework in grado di fornire una strumentazione ai binari dello spazio utente. È presente con un numero di strumenti utilizzabili per il tracciamento e l'analisi delle prestazioni dei programmi. Gli strumenti presenti in questa sezione forniscono una analisi in grado di assistere l'utente al rilevamento degli errori della memoria, come ad esempio l'uso di memoria non inizializzata e una assegnazione incorretta o una deallocazione della memoria stessa. Il tutto è presente con il pacchetto valgrind e può essere eseguito con il seguente comando:
valgrind --tool=toolname program
Sostituire toolname con il nome dello strumento desiderato (per una descrizione della memoria, memcheck, massif, o cachegrind), e program con il programma desiderato da usare con Valgrind. Attenzione, l'uso di Valgrind causerà una esecuzione più lenta del programma rispetto alle condizioni normali.
Una panoramica sulle capacità di Valgrind è disponibile in Sezione 3.5.3, «Valgrind». Per maggiori informazioni sui plugin disponibili per Eclipse consultate la Developer Guide disponibile su http://access.redhat.com/site/documentation/Red_Hat_Enterprise_Linux/. Per visualizzare la documentazione disponibile utilizzare il comando man valgrind; questo comando è disponibile se avete installato il pacchetto valgrind o presente nelle seguenti posizioni:
  • /usr/share/doc/valgrind-version/valgrind_manual.pdf, and
  • /usr/share/doc/valgrind-version/html/index.html.

5.3.1. Come usare Memcheck per una analisi sull'uso della memoria

Memcheck è lo strumento di Valgrind predefinito e può essere eseguito con valgrind program, senza specificare --tool=memcheck. Esso rileva e riporta un certo numero di errori della memoria difficili da rilevare e diagnosticare, come ad esempio un accesso della memoria non previsto, l'uso di valori non inizializzati o non definiti, memoria heap resa disponibile non correttamente, puntatori sovrapposti e perdite di memoria. Se utilizzate Memcheck i programmi verranno eseguiti da dieci a trenta volte più lentamente rispetto ad una loro esecuzione normale.
Memcheck ritorna errori specifici in base al tipo di problema rilevato. Questi errori vengono riportati in dettaglio nella documentazione di Valgrind inclusa in /usr/share/doc/valgrind-version/valgrind_manual.pdf.
Da notare che Memcheck riporta solo questi errori — e non impedisce la loro generazione. Se un programma esegue un accesso alla memoria tale da verificarsi un errore di segmentazione, questo errore si verificherà anche se utilizzate Memcheck. Detto questo, Memcheck registrerà un messaggio immediatamente prima alla presenza dell'errore.
Memcheck fornisce le opzioni della linea di comando necessarie per il controllo del processo. Alcune di queste opzioni disponibili sono:
--leak-check
Se abilitato Memcheck va alla ricerca di perdite di memoria quando il programma client termina la sua esecuzione. Il valore predefinito è summary, e il suo output riporta il numero di perdite trovate. Altri valori possibili sono yes e full, entrambi riportano le informazioni su ogni perdita individuale e no disabilita questo tipo di controllo.
--undef-value-errors
Se abilitato (impostato su yes), Memcheck riporta gli errori se vengono usati valori non identificati. Se disabilitato (impostato su no), questi errori non vengono riportati. Questa opzione è abilitata per impostazione predefinita. La sua disabilitazione aumenta leggermente la velocità di esecuzione di Memcheck.
--ignore-ranges
Permette all'utente di specificare una o più gamme da ignorare durante il controllo sull'usabilità di parte della memoria per altri scopi. Gamme multiple sono delimitate da virgole, per esempio --ignore-ranges=0xPP-0xQQ,0xRR-0xSS.
Per un elenco di opzioni completo consultare la documentazione inclusa in /usr/share/doc/valgrind-version/valgrind_manual.pdf.