Come usare Valgrind C ++

Come usare Valgrind C ++
Valgrind è un rilevatore di cattiva gestione della memoria. Possiamo conoscere le perdite di memoria e gli errori. È un codice di multiuso. È anche noto per essere uno strumento di debug di memoria per Linux. Questo rilevatore ha una caratteristica importante dell'esecuzione del programma nell'ambiente di memoria di Valgrind e monitora anche l'uso della memoria. Se, in alcuni casi di scrittura di un codice, una situazione del genere si verifica quando si utilizza la memoria che non è ancora inizializzata o si dimentica di liberare il puntatore, questi effetti caustici vengono rilevati da Valgrind. Questo articolo si concentrerà principalmente sull'uso di Valgrind per rilevare questo tipo di problemi.

Valgrind dipende dal sistema operativo in quanto è eseguibile solo dal sistema operativo Linux. Valgrind è una raccolta di strumenti di rilevamento della memoria che sono tutti open source. È ampiamente usato e più potente di altri strumenti come Memwatch, MTrace, ecc., che eseguono le stesse funzioni di Valgrind. Sebbene C ++ sia un linguaggio di programmazione molto potente e utile, richiede molto potere per il debug e l'esecuzione. Tuttavia, a volte si verificano errori di memoria, il che è un problema specifico. Allo stesso modo, esiste un altro errore che è una perdita di memoria. Valgrind è un programma specifico che ti aiuta a risolvere entrambi i problemi.

Installazione di Valgrind

Quando si lavora sulla piattaforma Linux, sono necessari molti nuovi programmi per eseguire alcuni programmi particolari su quel sistema operativo. Ad esempio, durante l'utilizzo di un terminale, è necessario uno scatto, appropriato per eseguire molte altre installazioni software. Allo stesso modo, Valgrind è anche installato sul terminale utilizzando un comando "sudo-apt".

$ sudo apt install Valgrind

Questo richiederà del tempo, ma alla fine, è installato con successo sul tuo sistema.

Alcune istruzioni per l'utilizzo di Valgrind

Il programma o l'applicazione che deve essere testato viene aggiunto tramite un compilatore che compila il programma. "-G" viene utilizzato in quanto è anche un compilatore per i programmi C ++.

Il valore risultante del record di rilevamento viene visualizzato come output sul terminale. Inoltre, il valore risultante può essere salvato in un file.

Se si desidera più istruzioni o hai bisogno di aiuto per utilizzare un comando specifico, puoi eseguire Valgrind -h, dandoti un'interfaccia del terminale di aiuto.

Usiamo un formato specifico per l'indicazione del rilevamento delle perdite nella memoria: # Valgrind -Tool = MemCheck -Leak -Check = Full ./file, -leak -check = full

Principio di rilevamento della memoria di valgrind

Valgrind utilizza un ambiente virtuale per l'implementazione dei programmi. Il programma o l'applicazione che devono essere testati su questo ambiente praticamente creato. La funzione di Valgrind è monitorare l'applicazione, il suo utilizzo e il rilascio di memoria in tempo reale e registrare anche le informazioni che possono mostrare alcune anomalie nella memoria. In Valgrind c'è un componente di rilevamento della memoria, MemCheck. Supporta molte funzioni. Alcuni di essi sono elencati di seguito:

  • Lo spazio di memoria non è assegnato.
  • L'accesso allo spazio di memoria ha superato il limite dato.
  • Lo spazio di memoria viene rilasciato ripetutamente.
  • L'applicazione dello spazio della memoria e il rilascio della memoria non sono abbinati.

MemCheck può controllare molti problemi in quanto è il componente più potente di Valgrind.

  • Variabili che non sono inizializzate
  • A Malloc () con la funzionalità di "Any Free ()"
  • Puntatore heap che accede alla memoria non valida.
  • Ora spiegheremo il funzionamento di Valgrind attraverso alcuni esempi

Memoria non iniziale

Questo problema si verifica quando si scrive un programma con l'uso di una singola variabile o array. E hai dimenticato di dichiarare e inizializzare l'array all'inizio. E al momento dell'uso, non sei ben consapevole di questo problema di dimenticare. Questo errore è identificato da Valgrind. Per spiegare l'esempio, abbiamo preso un programma in C++.

Il primo passo è utilizzare la libreria STD.

# includere

Qui puoi vedere che il valore di una variabile non è assegnato e viene dato all'array e, allo stesso modo, questi valori vengono stampati utilizzando un ciclo "per". Qui abbiamo dimenticato di assegnare un valore a una variabile. L'errore si verificherà quando viene optato un array vuoto per visualizzare i valori.

Ora eseguiremo questo codice sul terminale Ubuntu. Useremo un compilatore "G ++" per compilare il codice. A differenza del semplice codice C, qui useremo la parola chiave di "Valgrind".

$ gcc -wall -pedan -g file1.C -o file1
$ Valgrind ./file1

Ora questo comando porterà una porzione dalla pagina utilizzata. Innanzitutto, avremo qualche descrizione su "MemCheck". Quindi vengono mostrati i dettagli sul valore non iniziale. In questa parte, puoi vedere che il numero di riga è menzionato in cui si è verificato un errore. Qui il numero di riga è '11'.

Rilevamento di perdite di memoria

Supponiamo di avere un programma che contiene malloc () no free (). Questo porterà a una perdita di memoria. C'è un esempio di codice sorgente C ++.

Nel programma principale, viene utilizzato un puntatore del tipo di carattere con una funzione Malloc. Anche un piccolo programma è anche responsabile dell'identificazione di perdite di memoria. Ora vedremo l'output.

Il contenuto di output corrisponde all'output di quello precedente in alcuni aspetti, quindi abbiamo visualizzato solo la porzione di perdite di memoria per avere una concentrazione completa.

Ora compileremo il codice sopra e lo eseguiremo tramite un comando.

$ Valgrind--tool = MemCheck-Leak-check = Sì-Track-Origins = Sì ./file1

Questo comando mostrerà i seguenti risultati. Puoi osservare qui che vengono visualizzati numeri di byte che si perdono. La riga in cui si è verificato l'errore viene visualizzata anche nell'ultima riga dei valori risultanti.

Questo risultato contiene anche il riepilogo della perdita, che spiega i byte totali persi direttamente o indirettamente; Qualunque sia la descrizione, viene spiegato brevemente nel risultato.

Rilevamento dell'accesso alla memoria non valido

A volte tali condizioni si incontrano quando il codice sorgente contiene un bug, il puntatore che usiamo per accedere alla posizione della memoria limitata. Questo errore viene rilevato da MemCheck.

PTR [11] = 'Z';

In questo codice sopra menzionato, puoi vedere che abbiamo usato un puntatore "PTR" che sta cercando di accedere a una posizione di memoria che supera il confine.

L'output mostra che la dimensione non è valida. Come abbiamo dichiarato una serie di dimensioni [10]. E il puntatore sta accedendo allo slot di 11, che è fuori portata che abbiamo dichiarato.

Rilevamento delle operazioni di puntatori penzolanti

Questi sono quei suggerimenti che indicano già la memoria che viene liberata.

Qui abbiamo per la prima volta lo spazio libero; Anche dopo che lo spazio è stato liberato, il codice sta cercando di accedere alla memoria, che è indicato da un puntatore.

Conclusione

"Come usare Valgrind C ++" è implementato sul terminale Linux. Comprende il concetto di base, i tipi di valgrind, la sua installazione, l'istruzione per l'uso e alcune principali funzioni dei suoi componenti. MemCheck, come componente principale di Valgrind, rileva l'errore nel programma, sia che si tratti di perdita di memoria o di memoria non iniziale. Tutti gli esempi menzionati mostrano il funzionamento di Valgrind, incluso Malloc (). Questo articolo sarà utile per quanto riguarda il lavoro e i principi di Valgrind nell'ambiente di programmazione di C++.