Domanda

Qualcuno può fornire un rapido alto livello di spiegazione di come Valgrind funziona?Un esempio:come fa a sapere quando la memoria viene allocata e liberato?

È stato utile?

Soluzione

Valgrind fondamentalmente esegue l'applicazione in una "sandbox". Durante l'esecuzione in questa sandbox, è in grado di inserire le proprie istruzioni avanzate di debugging e profiling.

Dal manuale:

Il programma viene quindi eseguito su un sintetico di CPU da Valgrind core.Come nuovo codice viene eseguito per la prima volta, il nucleo mani il codice per lo strumento selezionato.Il tool consente di propria strumentazione codice per questo e mani il risultato al core, che coordina la continuità nell'esecuzione di questo strumentato codice.

Quindi, fondamentalmente, valgrind offre un processore virtuale che esegue l'applicazione.Tuttavia, prima che l'applicazione di istruzioni di elaborazione, sono passati a strumenti come la memcheck).Questi strumenti sono simili ai plugin, e sono in grado di modificare la vostra applicazione prima di eseguire sul processore.

La cosa grandiosa di questo approccio è che non è necessario modificare o ricollegare il programma per eseguire, in valgrind.Causa il programma per l'esecuzione più lento, tuttavia valgrind non è destinato per misurare le prestazioni o eseguire durante la normale esecuzione dell'applicazione, quindi questo non è davvero un problema.

Altri suggerimenti

Valgrind è una Dinamica Analisi Binaria (DPA), strumento che utilizza Dinamica di Strumentazione Binaria (DPI) quadro di controllo di allocazione della memoria, al fine di rilevare situazioni di stallo e di profilo di applicazioni.DPI quadro ha il suo basso livello di gestore di memoria, di pianificazione, il filo conduttore e il gestore del segnale.Valgrind strumento suite comprende come strumento di

  1. Memcheck - tracce di allocazione di memoria in modo dinamico e rapporti di perdite di memoria.
  2. Già con helgrind - rileva e segnala blocca morti, potenziale gare di dati e blocco di inversioni.
  3. Cachegrind - simula il modo in cui l'applicazione interagisce con cache di sistema e fornisce informazioni sulla cache miss.
  4. Nulgrind - un semplice valgrind che non fare alcuna analisi.Utilizzato dagli sviluppatori per il benchmark delle prestazioni.
  5. Massiccio - uno strumento per analizzare la memoria heap di utilizzo dell'applicazione.

Valgrind strumento utilizza smontare e resynthesize meccanismo in cui si carica l'applicazione in un processo, smonta il codice dell'applicazione, aggiungere la strumentazione codice per l'analisi, assembla ed esegue l'applicazione.Utilizza Solo Intime Compilatore JIT () per incorporare l'applicazione con la strumentazione di codice.

             Valgrind Tool = Valgrind Core + Tool Plugin

Valgrind Core smonta il codice dell'applicazione e passa il frammento di codice a strumento di plugin per la strumentazione.Lo strumento plugin aggiunge il codice di analisi e monta di nuovo.Così, Valgrind fornisce la flessibilità necessaria per scrivere il nostro strumento di sopra di Valgrind quadro.Valgrind utilizza ombra registri e ombre della memoria come strumento di lettura/scrittura delle istruzioni di lettura/scrittura chiamata di sistema, stack e heap allocazioni.

Valgrind fornisce un wrapper per la chiamata di sistema e registri per il pre e post callback per ogni chiamata di sistema per tenere traccia di memoria letta come parte del sistema di chiamata.Così, Valgrind è un OS livello di astrazione tra il sistema Operativo Linux e l'applicazione client.

Il diagramma seguente illustra le 8 fasi di Valgrind :

8 phases of Valgrind

valgrind si siede come un livello tra il programma e il sistema operativo, per intercettare chiamate al sistema operativo richiesta di memoria (de)l'assegnazione e la registrazione di ciò che viene manipolato prima di allora effettivamente l'allocazione di memoria e di passare nuovamente un equivalente.È, in sostanza, come la maggior parte analizzatori di codice del lavoro, se non a livello molto più basso (chiamate di sistema invece di programma di chiamate di funzione).

Valgrind è fondamentalmente un macchina virtuale che esegue il programma.Si tratta di una architettura virtuale che intercetta ogni chiamata allocare/memoria libera.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top