2009-07-22 6 views
65

Ho bisogno di profilare un codice che esegua C++ su Linux. Ragazzi, potete consigliare alcuni profiler?Che cos'è un buon profiler facile da usare per C++ su Linux?

+1

È necessario aggiungere tag Linux e C++. Probabilmente otterrai una risposta e una gamma di opinioni migliori. – Duck

+1

Sembra un duplicato di http://stackoverflow.com/questions/375913/what-can-i-use-to-profile-c-code-in-linux. –

+0

ad esempio: likwid, LLTng, oprofile, valgrind, vtune, gprof, perf, gperftools, pTop – Shan

risposta

17

valgrind è un noto linux profiler

+0

pensiero valgrind era più per perdita di memoria controllo .. Sto cercando di vedere quali funzioni vengono chiamate ecc. – shergill

+8

usa lo strumento suite chiamato "callgrind" – dfa

+1

Valgrind è semplicemente un framework per la creazione di strumenti dinamici. Anche se è diventato sinonimo di Memcheck, uno strumento costruito su Valgrind.Callgrind è un esperto di profiler. – Falaina

11

io sono un fan di Oprofile. Si tratta di installare un modulo del kernel e ha un po 'di una curva di apprendimento, ma è abbastanza potente e funziona molto bene per programmi/programmi ottimizzati senza eseguire il debug dei simboli.

Vtune è un altro profiler molto potente realizzato da Intel. Credo che la versione per Linux sia gratuita per software non commerciale.

C'è anche la suite di strumenti Valgrind proposta da dfa. Callgrind sarebbe probabilmente quello che ti interessa di più. Anche Cachegrind (il cui set di funzionalità è un sottoinsieme di Callgrind) e Massif sono interessanti, ma non ho esperienza con quest'ultimo.

+0

+1 per oprofile, che non è uno "strumento facile" – dfa

+1

Haha, true. Probabilmente non dovrei rendere il suono così facile :) Non è certamente così semplice come "esegui il programma sotto di esso" come strumenti Vtune e Valgrind, ma sento che ti ci abitui abbastanza velocemente. – Falaina

+0

oprofile sembra interessante - supporta x86_64? – LiraNuna

2

gprof è lo strumento gnu standard per la profilatura.

4

Google ha anche un bel profiler come parte del google-perftools - che sono inclusi in Debian/Ubuntu e forse altre distribuzioni.

5

Dai uno sguardo a KCacheGrind che è un frontend grafico a valgrind e lo rende davvero facile da usare.

34

Utilizzare gprof.

Basta compilare con il flag -pg (credo (ma non sono sicuro) che devi girare le ottimizzazioni) e usare gprof per analizzare il file gmon.out che il tuo eseguibile produrrà.

esempio:

gcc -pg -o whatever whatever.c 

./whatever 

gprof whatever gmon.out 

Stessa cosa con g ++ e CPP.

+20

Il profiling del codice non ottimizzato è un po 'inutile, non è vero? Allo stesso modo, il codice di profilazione che è stato pesantemente modificato con -pg ti porta spesso a ottimizzare i punti sbagliati. – federal

13

Zoom da RotateRight (http://www.rotateright.com) è quello che ho usato. Ha una vista a farfalla delle funzioni e puoi fare doppio clic su qualsiasi funzione per immergerti nel codice sorgente o asm. Costruisci con informazioni di debug (-g) per vedere la tua fonte, ma dovresti comunque creare e creare il codice ottimizzato.

+0

Basta dare a questo programma un colpo, è davvero molto carino! Attualmente il mio profiler preferito su Linux; tuttavia vale la pena ricordare che richiede che il codice sia compilato con '-fno-omit-frame-pointer' per un profilo efficace. –

+1

Il collegamento sembra morto. Qualcuno sa dove (o se) può essere trovato altrove? –

2

Dai uno sguardo allo Sysprof. Probabilmente la distribuzione è già disponibile.

Nota che tutti i profiler citati funzionano meglio se la tua applicazione è compilata con i puntatori dei frame. Cioè, dovresti usare -fno-omit-frame-pointer sulla riga di comando gcc.