So profilieren Sie ein C-Programm unter Linux mit GNU gprof

Leistung ist eine der größten Herausforderungen für Programmierer bei der Entwicklung von Software. Aus diesem Grund ist die Code-Profilierung einer der wichtigsten Aspekte der Softwareentwicklung, da Sie damit Engpässe, toten Code und sogar Fehler identifizieren können. Wenn Sie ein Programmierer sind, der Softwareanwendungen für Linux entwickelt, ist der GNU-Profiler „gprof“ das Tool, auf das Sie achten sollten.

Herunterladen und installieren

Gprof ist bei den meisten Linux-Distributionen vorinstalliert. Wenn dies bei Ihrer Linux-Distribution jedoch nicht der Fall ist, können Sie es über einen Befehlszeilen-Paketmanager 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 install binutils

Anforderungen

Bevor Sie gprof zum Generieren von Profilierungsdaten verwenden, stellen Sie sicher, dass die ausführbare Datei Ihres Programms zusätzliche Informationen enthält, die der Profiler für eine ordnungsgemäße Funktion benötigt. Dies kann erreicht werden, indem Sie beim Kompilieren Ihres Codes die Befehlszeilenoption -pg hinzufügen, vorausgesetzt, Sie verwenden den gcc-Compiler. Wenn Sie zum Kompilieren und Verknüpfen separate Befehle verwenden, fügen Sie die Befehlszeilenoption zu beiden Befehlen hinzu.

Verwendung von gprof

Betrachten Sie als Beispiel das folgende C-Programm:

#include  void func2() { int count = 0;  for(count=0; count 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:

Nach erfolgreicher Ausführung erstellt das Programm eine Datei mit dem Namen „gmon.out“, die die Profilierungsinformationen enthält, allerdings in Rohform, was bedeutet, dass Sie die Datei nicht öffnen und die Informationen 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 Profilierungsinformationen in einem für Menschen lesbaren Format in die Datei „prof_output“. Beachten Sie, dass Sie den Namen der Ausgabedatei nach Bedarf ändern können.

Flaches Profil und Anrufdiagramm

Wenn Sie die Datei mit den Profilierungsdaten öffnen, werden Sie feststellen, dass die Informationen in zwei Teile unterteilt sind: Flaches Profil und Anrufdiagramm. Während Ersteres Details wie die Anzahl der Funktionsaufrufe, die insgesamt in einer Funktion verbrachte Ausführungszeit und mehr enthält, beschreibt Letzteres den Aufrufbaum des Programms und liefert Details zu den übergeordneten und untergeordneten Funktionen einer bestimmten Funktion.

In unserem Fall handelt es sich beispielsweise um das folgende Flachprofil:

Jede Probe zählt 0,01 Sekunden.  % kumulative 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

Unten sehen Sie das Anrufdiagramm:

Index % Zeit, die selbst Kinder angerufen haben, Name 0,00 0,00 1/256 Haupt [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 Haupt [2]
0,00 0,94 1/1 Funktion1 [3]
0,00 0,00 1/256 func2 [1]
----------------------------------------------- 0,00 0,94 1 /1 Haupt [2]
[3] 99,6 0,00 0,94 1 Funktion1 [3]
0,94 0,00 255/256 func2 [1]
-----------------------------------------------

Notiere dass der ausführliche Erklärung Eines dieser Felder ist in der Datei mit Profilierungsinformationen (in diesem Fall prof_output) vorhanden und wird bei jeder Ausführung des Profilers generiert. Um die Details zu deaktivieren, 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 verarbeiteten 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 Anrufdiagramm 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 erhalten, kompilieren Sie das Programm mit -g (zusammen mit der zuvor erläuterten Option -pg) und führen Sie den Befehl gprof mit der Befehlszeilenoption -A aus.
Index
  1. Herunterladen und installieren
  2. Anforderungen
  3. Verwendung von gprof
  4. Flaches Profil und Anrufdiagramm
  5. Einige wichtige Punkte

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Go up