Was ist ein guter, einfach zu verwendender Profiler für C ++ unter Linux? [geschlossen]

79

Ich muss einen Code für C ++ unter Linux erstellen. Könnt ihr einige Profiler empfehlen?

Shergill
quelle
1
Sie sollten Linux- und C ++ - Tags hinzufügen. Sie werden wahrscheinlich eine bessere Antwort und Meinungsvielfalt erhalten.
Ente
2
Sieht aus wie ein Duplikat von stackoverflow.com/questions/375913/… .
Michael Myers
zB: likwid, LLTng, oprofile, valgrind, vtune, gprof, perf, gperftools, pTop
Shan
Siehe diese Frage auf slant: slant.co/improve/topics/1005
ideasman42

Antworten:

37

Verwenden Sie gprof.

Kompilieren Sie einfach mit -pgflag (ich denke (bin mir aber nicht sicher), ob Sie Optimierungen deaktivieren müssen.) Und analysieren Sie mit gprof die Datei gmon.out, die Ihre ausführbare Datei dann erstellt.

z.B:

gcc -pg -o whatever whatever.c

./whatever

gprof whatever gmon.out

Gleiches gilt für g ++ und cpp.

smcameron
quelle
32
Das Profilieren von nicht optimiertem Code ist ein bisschen sinnlos, nicht wahr? In ähnlicher Weise führt Sie der mit -pg stark modifizierte Profiling-Code häufig dazu, die falschen Stellen zu optimieren.
Bundes
1
-pg ist eine Linker-Option, kein Compiler
Slug Pue
24

valgrind ist ein bekannter Linux-Profiler

dfa
quelle
dachte, Valgrind war mehr für die Überprüfung von Speicherlecks. Ich versuche zu sehen, welche Funktionen aufgerufen werden usw.
Shergill
14
Verwenden Sie das Suite-Tool "callgrind"
dfa
2
Valgrind ist einfach ein Framework zum Erstellen dynamischer Tools. Obwohl es zum Synonym für Memcheck geworden ist, ein Tool, das auf Valgrind basiert. Callgrind ist ein ziemlich guter Profiler.
Falaina
13

Ich habe den Zoom von RotateRight ( http://www.rotateright.com ) verwendet. Es hat eine Butterfly-Ansicht der Funktionen und Sie können auf jede Funktion doppelklicken, um in den Quell- oder ASM-Code einzutauchen. Erstellen Sie mit Debugging-Informationen (-g), um Ihre Quelle anzuzeigen. Sie sollten jedoch weiterhin optimierten Code erstellen und profilieren .

XWare
quelle
1
Habe gerade dieses Programm ausprobiert, es ist wirklich sehr schön! Derzeit mein Lieblingsprofiler unter Linux; Es ist jedoch erwähnenswert, dass Code erstellt werden muss, -fno-omit-frame-pointerum ein effektives Profil zu erstellen.
Nik Reiman
1
Der Link scheint tot zu sein. Weiß jemand, wo (oder ob) es woanders zu finden ist?
Simon F
12

Ich bin ein Fan von Oprofile . Es beinhaltet die Installation eines Kernelmoduls und hat eine gewisse Lernkurve, ist aber ziemlich leistungsfähig und funktioniert sehr gut für optimierte Programme / Programme ohne Debugging von Symbolen.

Vtune ist ein weiterer sehr leistungsfähiger Profiler von Intel. Ich glaube, die Linux-Version ist kostenlos für nichtkommerzielle Software.

Es gibt auch die von dfa vorgeschlagene Valgrind-Tool- Suite. Callgrind ist wahrscheinlich das, woran Sie am meisten interessiert sind. Cachegrind (dessen Feature-Set eine Teilmenge von Callgrind ist) und Massif sind ebenfalls interessant, aber ich habe keine Erfahrung mit letzterem.

Falaina
quelle
+1 für oprofile, das ist kein "einfaches Werkzeug"
dfa
1
Haha, wahr. Ich sollte das wahrscheinlich nicht so einfach machen :) Es ist sicherlich nicht so einfach wie "Programm darunter ausführen" wie die Tools Vtune und Valgrind, aber ich glaube, Sie gewöhnen sich ziemlich schnell daran.
Falaina
oprofile sieht interessant aus - unterstützt es x86_64?
LiraNuna
VTune ist leider für keine Zwecke kostenlos.
Rustyx
5

Werfen Sie einen Blick auf KCacheGrind , die ein grafisches Frontend ist valgrind und macht es wirklich einfach , es zu benutzen.

Milan Babuškov
quelle
5

Google hat auch einen netten Profiler als Teil der Google-Perftools - die in Debian / Ubuntu und möglicherweise anderen Distributionen enthalten sind.

Dirk Eddelbuettel
quelle
2

gprof ist das Standard-Gnu-Tool für die Profilerstellung.

twk
quelle
2

Schauen Sie sich Sysprof an . Ihre Distribution hat es höchstwahrscheinlich bereits verfügbar.

Beachten Sie, dass alle genannten Profiler am besten funktionieren, wenn Ihre Anwendung mit Frame-Zeigern kompiliert wird. Das heißt, Sie sollten -fno-omit-frame-pointer in der gcc-Befehlszeile verwenden.

Søren Sandmann
quelle