Leistung ist eine der größten Herausforderungen, denen Programmierer bei der Entwicklung von Software gegenüberstehen. Das ist der Grund, warum Code-Profiling einer der wichtigsten Aspekte der Softwareentwicklung ist, da Sie Engpässe, toten Code und sogar Bugs erkennen können. Wenn Sie ein Programmierer sind, der Software-Anwendungen für Linux entwickelt, ist der GNU-Profiler "gprof" das richtige Werkzeug.

Herunterladen und installieren

Gprof ist bereits mit den meisten Linux-Distributionen vorinstalliert, aber wenn dies bei Ihrer Linux-Distribution nicht der Fall ist, können Sie es über einen Befehlszeilen-Paket-Manager wie apt-get oder yum herunterladen und installieren. Führen Sie beispielsweise den folgenden Befehl aus, um gprof auf Debian-basierten Systemen herunterzuladen und zu installieren:

 sudo apt-get Installations-Binutils 

Bedarf

Bevor Sie gprof zum Generieren von Profiling-Daten verwenden, stellen Sie sicher, dass Ihre Programmdatei zusätzliche Informationen enthält, die der Profiler für die ordnungsgemäße Funktion benötigt. Dies kann erreicht werden, indem -pg beim Kompilieren des Codes die -pg hinzufügen, vorausgesetzt, Sie verwenden den gcc Compiler. Wenn Sie separate Befehle zum Kompilieren und Linken verwenden, fügen Sie den beiden Befehlen die Befehlszeilenoption hinzu.

Mit gprof

Betrachten Sie das folgende C-Programm als ein Beispiel:

 #include void func2 () {int count = 0; für (count = 0; count <0XFFFFF; count ++); Rückkehr; } void func1 (void) {int Anzahl = 0; für (count = 0; count <0XFF; count ++) func2 (); Rückkehr; } int main (void) {printf ("\ n Hallo Welt! \ n"); func1 (); func2 (); zurückgeben 0; } 

Wie im vorherigen Abschnitt beschrieben, kompilieren Sie den Code mit der Option -pg :

 gcc -Wall -pg test.c -o test 

Führen Sie nach der Kompilierung das Programm aus:

 ./Prüfung 

Nach erfolgreicher Ausführung erzeugt das Programm eine Datei mit dem Namen "gmon.out", die die Profilinformationen enthält, jedoch in einer Rohform, was bedeutet, dass Sie die Datei nicht öffnen und die Informationen nicht direkt lesen können. Führen Sie den folgenden Befehl aus, um eine für Menschen lesbare Datei zu generieren:

 gprof test gmon.out> prof_output 

Dieser Befehl schreibt alle Profilinformationen in einem für Menschen lesbaren Format in die Datei "prof_output". Beachten Sie, dass Sie den Namen der Ausgabedatei beliebig ändern können.

Flaches Profil und Call Graph

Wenn Sie die Datei mit den Profilerstellungsdaten öffnen, sehen Sie, dass die Informationen in zwei Teile unterteilt sind: Flaches Profil und Aufrufdiagramm. Während Ersteres Details wie Anzahl der Funktionsaufrufe, Gesamtausführungszeit in einer Funktion und mehr enthält, beschreibt Letzterer den Aufrufbaum des Programms und liefert Details über die Eltern- und Kindfunktionen einer bestimmten Funktion.

Zum Beispiel ist das folgende das flache Profil in unserem Fall:

 Jede Probe zählt als 0, 01 Sekunden. % kumulativ selbst selbst Gesamtzeit Sekunden Sekunden Anrufe MS / Anruf MS / Anrufname 100, 00 0, 94 0, 94 256 3, 67 3, 67 func2 0, 00 0, 94 0, 00 1 0, 00 936, 33 func1 

Das Folgende ist das Call-Diagramm:

 index% time self children name 0.00 0.00 1/256 main [2] 0.94 0.00 255/256 func1 [3] [1] 100.0 0.94 0.00 256 func2 [1] -------------- --------------------------------- [2] 100.0 0.00 0.94 main [2] 0.00 0.94 1/1 func1 [ 3] 0.00 0.00 1/256 func2 [1] --------------------------------------- -------- 0, 00 0, 94 1/1 main [2] [3] 99, 6 0, 00 0, 94 1 func1 [3] 0, 94 0, 00 255/256 func2 [1] ------------- ---------------------------------- 

Beachten Sie, dass die detaillierte Erklärung dieser Felder in der Datei enthalten ist, die Profilinformationen enthält (in diesem Fall prof_output) und jedes Mal generiert wird, wenn der Profiler ausgeführt wird. Um die Details zu gprof, verwenden Sie die Befehlszeilenoption -b mit dem Befehl gprof .

Einige wichtige Punkte

  • Um die Datei gmon.out ordnungsgemäß zu schreiben, muss Ihr Programm normal beendet werden. Die Datei wird nicht erstellt, wenn das Programm entweder durch Aufrufen der Funktion _exit() beendet wird oder aufgrund eines nicht behandelten Signals abnormal beendet wird.
  • Die Datei "gmon.out" wird immer im aktuellen Arbeitsverzeichnis erstellt. Stellen Sie daher sicher, dass Ihr Programm über ausreichende Berechtigungen zum Erstellen einer Datei im aktuellen Verzeichnis verfügt.
  • Ein externes Tool mit dem Namen gprof2dot kann verwendet werden, um das Aufrufdiagramm von gprof in eine grafische Form zu konvertieren.
  • Mit gprof können Sie auch eine kommentierte Quellenliste erstellen, die eine Vorstellung davon gibt, wie oft jede Zeile des Programms ausgeführt wurde. Um diese Informationen zu erstellen, kompilieren Sie das Programm mit -g (zusammen mit der -pg erläuterten Option -pg ) und führen Sie den Befehl gprof mit der Befehlszeilenoption -A .