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.