JonixLUG Forum

Programmazione => Tools => Topic started by: CrashTest on March 15, 2017, 07:23:33 PM

Title: Valgrind - Breve introduzione
Post by: CrashTest on March 15, 2017, 07:23:33 PM
(https://upload.wikimedia.org/wikipedia/en/f/f9/Valgrind_logo.png)
Ciao a tutti, in questo post daremo uno sguardo veloce a Valgrind per capire cosa è e a cosa serve. Nei prossimi articoli analizzeremo nel dettaglio i diversi tools e vedremo come utilizzarli al meglio.

Valgrind è uno strumento multiuso, un coltellino svizzero dei programmatori. Questo ci aiuta nei casi più disparati: dal profiling al debugging della memoria per Linux.Inizialmente era disponibile per x86, dalla versione 3 lo è anche per AMD64 ed altre architetture. Valgrind ci permette di eseguire il nostro programma nel suo ambiente che controlla l'utilizzo della memoria, come ad esempio le chiamate a malloc o free (o new e delete nel caso di C++). Se si scrive fuori la fine di un array, ci si dimentica di liberare un puntatore o altri errori o sviste di questo tipo, Valgrind è in grado di rilevarlo. Dal momento che questi sono problemi abbastanza comuni, vedremo come utilizzare Valgrind per trovare questi tipi di problemi di memoria, anche se Valgrind è uno strumento molto più potente e che può fare molto di più.

Il comando per lanciare Valgrind è:

Code: You are not allowed to view links. Register or Login
$ valgrind --tool=nome_tool program_pathnome_tool è il nome dello strumento da usare e program_path è il percorso del programma da lanciare con Valgrind.
I tools più conosciuti ed utilizzati sono:


Memcheck è un rilevatore di errori in memoria. Aiuta ai programmatori a scrivere programmi (specialmente in  C e C ++) consistenti e senza problemi in memoria.

Addrcheck è una versione semplificata ed alleggerita di Memcheck. È identico a MemCheck in tutto e per tutto, ad eccezione di un dettaglio importante: non fa controlli sugli Undefined values. Questo significa che Addrcheck è più veloce di Memcheck ed utilizza meno risorse (in termini di memoria e processore).

Massif  è un profiler dell'heap. Ci permette di analizzare lo stato dello heap e ci permette quindi di scrivere programmi che utilizzano meno memoria.

Cachegrind è un profile che si occupa principalmente della cache e della predizione delle diramazioni. Ci aiuta a creare programmi più veloci e performanti.

Callgrind invece è uno strumento di profiling mantiene uno storico delle chiamate tra le funzioni in esecuzione in un programma, una sorta di grafo delle chiamate.

Helgrind è un rivelatore di errori nei thread. Ci aiuta a fare i programmi multi-threaded più corretto.

Nel prossimo post vedremo come usare Memcheck e Addrcheck, nel frattempo vi saluto e vi invito segnalare eventuali errori.
Saluti, CrashTest

Fonte: http://cosimofanelli.altervista.org/valgrind-a-brief-summary/ (http://cosimofanelli.altervista.org/valgrind-a-brief-summary/)