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?


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.


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


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 .


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.


+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



2

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


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.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.