2010-03-08 4 views
15

Voglio usare valgrind per fare un po 'di profilazione, dal momento che non ha bisogno di ricostruire il programma. (Il programma che voglio al profilo è già costruire con “-g")Come utilizzare callgrind per profilare solo un certo periodo di esecuzione del programma?

Ma valgrind (callgrind) è piuttosto lento ... quindi ecco quello che devo fare:

  1. avviare il server (che voglio al profilo che server)
  2. tipo di collegare al server
  3. prima di fare qualche operazione sul server, avviare la raccolta dati del profilo
  4. dopo l'operazione è fatto, terminali raccolta dati del profilo
  5. analizzare i dati di profilo.

Posso fare questo genere di cose usando Sun Studio su Solaris. (usando dbx). Voglio solo sapere è possibile fare la stessa cosa usando valgrind (callgrind)?

Grazie

+1

Quale sistema operativo? –

+0

Sì, è Linux – superb

+0

Spero che Valgrind non sia la tua unica opzione. Hai considerato questa tecnica: (http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux/378024#378024) Puoi anche usare * * pstack ** o ** lsstack ** per fare la stessa cosa. Per soldi, puoi ottenere RotateRight/Zoom che è abbastanza buono. –

risposta

4

Tu non dici quale sistema operativo - Sto assumendo Linux - nel qual caso si potrebbe desiderare di guardare oprofile (gratuito) o Zoom (non libero, ma è possibile ottenere una licenza di valutazione) , entrambi sono profilatori di campionamento e possono profilare il codice esistente senza ricompilazione. Lo Zoom è molto più bello e facile da usare (ha una GUI e alcune interessanti funzionalità aggiuntive), ma probabilmente hai già oprofile sul tuo sistema.

+0

Sì, vedo solo che alcuni altri ragazzi hanno consigliato questi 2 strumenti. Per me, il punto di usare valgrind è che non ha accesso come root dal momento che sto usando un server pubblico per fare profiling ... – superb

+0

Penso che tu abbia solo bisogno di un accesso root per * installare * questi strumenti - dovresti essere in grado di eseguirli senza accesso root, no? (Uso Zoom da un normale account non root, ma è per il profiling locale, quindi non posso essere sicuro del caso del profilo remoto.) –

+0

Vedo, grazie.Ma voglio ancora sapere se è possibile usare valgrind per fare la stessa cosa. A volte, quando non riesco a riprodurre il problema delle prestazioni, ho bisogno di dare un'occhiata direttamente alla macchina di prova, ma installare il software di profilazione (che raccoglie il contatore hardware) può avere un impatto sulle prestazioni del sistema e un sacco di impostazioni di base che non sono consentite. Quindi valgrind è ancora l'opzione migliore, se posso usarla nel modo in cui ho descritto nella domanda. – superb

27

Si dovrebbe guardare callgrind documentation e leggere su callgrind_control.

  1. lanciare la vostra applicazione: valgrind --tool=callgrind --instr-atstart=no your_server.x
  2. Vedi 1.
  3. inizio di raccogliere i dati del profilo: callgrind_control -i on
  4. fine di raccogliere dati profilo: callgrind_control -i off
  5. Analizzare i dati con kcachegrind o callgrind_annotate/cg_annotate
6

per il profiling solo qualche funzione si possono anche trovare utili CALLGRIND_START_INSTRUMENTATION e CALLGRIND_STOP_INSTRUMENTATION da <valgrind/callgrind.h> intestazione e utilizzando l'opzione di callgrind --instr-atstart=no come suggerito in Doomsday's answer.