Ich muss einen Code für C ++ unter Linux erstellen. Könnt ihr einige Profiler empfehlen?
Ich muss einen Code für C ++ unter Linux erstellen. Könnt ihr einige Profiler empfehlen?
Antworten:
Verwenden Sie gprof.
Kompilieren Sie einfach mit -pg
flag (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.
valgrind ist ein bekannter Linux-Profiler
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 .
-fno-omit-frame-pointer
um ein effektives Profil zu erstellen.
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.
Werfen Sie einen Blick auf KCacheGrind , die ein grafisches Frontend ist valgrind und macht es wirklich einfach , es zu benutzen.
Google hat auch einen netten Profiler als Teil der Google-Perftools - die in Debian / Ubuntu und möglicherweise anderen Distributionen enthalten sind.
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.