2012-02-14 15 views
17

Ho bisogno di un grafico delle chiamate dinamico per la mia app. Lo eseguo con lo strumento callgrind (suite valgrind) e il file callgrind.out.xxxxx. Ora, voglio fare una rappresentazione grafica di questi dati. KCacheGrind non mi aiuta molto perché disegna una parte limitata del grafico (disegna ~ 50 funzioni invece di ~ 1500 profilate e non so come risolverlo). Come posso ottenere un'immagine grafica in cui verranno disegnate tutte le funzioni?Interpretazione dei dati del callgrind

+0

Ha il callgrind.out contenere dati che manca nel grafico? Inoltre, se si ordina per "sé", è rimasto il tempo/le istruzioni rilevanti che vengono spese in funzioni non elencate? Non riesco a ricordare un caso in cui parti rilevanti sono state omesse. –

+0

Sì, callgrind.out contiene tutti i dati necessari (comprese le funzioni mancanti nel grafico) e la maggior parte delle funzioni che non sono elencate nel grafico hanno tempo/istruzioni pertinenti spese. Non so perché 'KCacheGrind' ne disegna solo una parte. UPD: se scelgo la funzione che voglio nella lista delle funzioni (posizionata a sinistra nel layout di default 'KCacheGrind') il grafico viene ridisegnato per visualizzare queste funzioni, ma ne mancano ancora altre. Ho bisogno dell'intero grafico in una volta. Grazie in anticipo. – maverik

risposta

22

Ok, ho trovato la strada. Il file callgrind.out generato può essere convertito nel file dot utilizzando gprof2dot (sì, questo strumento può analizzare anche i file callgrind). E allora si può ottenere l'immagine grafico utilizzando dot -T<type> dotfile.dot -o graphfile.<type>

+0

Interessante. Il grafico generato è leggibile per 1500 funzioni? –

+0

L'accordo è che in realtà ho bisogno di confrontare due grafici da due diverse versioni di software, quindi non c'è alcun obiettivo di leggere/comprendere l'intero grafico, ho bisogno solo di alcuni percorsi e so dove dovrei cercarli. OTOH, l'immagine di generazione 'png' richiede circa 5 minuti sul mio' Core i7-2600 3.4GHz/8 Gb DDR3', la dimensione del file risultante è di 23 MByte. Non tutti i visualizzatori di immagini possono gestirli in modo rapido e corretto (perfetto stress-test IMO :)) – maverik

+0

dovremmo effettivamente digitare '-T '? o sostituiamo '' con qualcosa? – nmz787

16

Utilizzando il seguente comando per generare graph.png utilizzando gprof2dot

$./gprof2dot.py --format=callgrind --output=out.dot /tmp/cachegrind.out.1360843301.16101 

$dot -Tpng out.dot -o graph.png 
Problemi correlati