Provided by: manpages-de_4.26.0-1_all 

BEZEICHNUNG
sprof - Daten der Laufzeitbibliothek lesen und anzeigen
ÜBERSICHT
sprof [Option]… Laufzeitbibliothekpfad [Profilierungsdatenpfad]
BESCHREIBUNG
Der Befehl sprof zeigt die Profilierungszusammenfassung für die als erstes Befehlszeilenargument
angegebene Laufzeitbibliothek an. Die Profilierungszusammenfassung wird aus vorab erstellten
Profilierungsdaten in dem (optionalen) zweiten Befehlszeilenargument erzeugt. Falls der
Profilierungsdatenpfad nicht angegeben wird, dann wird sprof versuchen, ihn mittels des Sonamens der
Laufzeitbibliothek abzuleiten, indem es nach einer Datei mit dem Namen <Soname>.profile im aktuellen
Verzeichnis sucht.
OPTIONEN
Die folgenden Befehlszeilenoptionen geben an, welche Profilierungsausgabe erstellt werden soll:
--call-pairs
-c Gibt eine Liste von Paaren von Aufrufpfaden für die durch die Laufzeitbibliothek exportierten
Schnittstellen aus, zusammen mit der Anzahl der Verwendungen jedes Pfades.
--flat-profile
-p Erstellt ein flaches Profil aller Funktionen in dem überwachten Objekt, mit Zählern und Ticks.
--graph
-q Erstellt einen Aufrufgraphen.
Falls keine der obigen Optionen angegeben ist, dann ist das Standardverhalten die Anzeige eines flachen
Profils und eines Aufrufgraphen.
Die folgenden zusätzlichen Befehlszeilenoptionen sind verfügbar:
--help
-? Zeigt eine Zusammenfassung der Befehlszeilenoptionen und -argumente und beendet das Programm.
--usage
Zeigt eine kurze Gebrauchsinformation und beendet sich.
--version
-V Zeigt die Programmversion an und beendet das Programm.
STANDARDS
GNU.
BEISPIELE
Das folgende Beispiel zeigt die Verwendung von sprof. Das Beispiel besteht aus einem Hauptprogramm, das
zwei Funktionen in einer Laufzeitbibliothek aufruft. Zuerst der Code des Hauptprogramms:
$ cat prog.c
#include <stdlib.h>
void x1(void);
void x2(void);
int
main(int argc, char *argv[])
{
x1();
x2();
exit(EXIT_SUCCESS);
}
Die Funktionen x1() und x2() sind in der folgenden Quelldatei definiert, die zur Erstellung der
Laufzeitbibliothek verwandt wird:
$ cat libdemo.c
#include <unistd.h>
void
consumeCpu1(int lim)
{
for (unsigned int j = 0; j < lim; j++)
getppid();
}
void
x1(void) {
for (unsigned int j = 0; j < 100; j++)
consumeCpu1(200000);
}
void
consumeCpu2(int lim)
{
for (unsigned int j = 0; j < lim; j++)
getppid();
}
void
x2(void)
{
for (unsigned int j = 0; j < 1000; j++)
consumeCpu2(10000);
}
Jetzt wird die Laufzeitbibliothek mit dem echten Namen libdemo.so.1.0.1 und dem Sonamen libdemo.so.1
erstellt:
$ cc -g -fPIC -shared -Wl,-soname,libdemo.so.1 \
-o libdemo.so.1.0.1 libdemo.c
Dann werden symbolische Links für die Bibliothek-Sonamen und den Bibliothek-Linkernamen konstruiert:
$ ln -sf libdemo.so.1.0.1 libdemo.so.1
$ ln -sf libdemo.so.1 libdemo.so
Dann wird das Hauptprogramm kompiliert, gegen die Laufzeitbibliothek gelinkt und dann die dynamischen
Abhängigkeiten des Programms aufgelistet:
$ cc -g -o prog prog.c -L. -ldemo
$ ldd prog
linux-vdso.so.1 => (0x00007fff86d66000)
libdemo.so.1 => not found
libc.so.6 => /lib64/libc.so.6 (0x00007fd4dc138000)
/lib64/ld-linux-x86-64.so.2 (0x00007fd4dc51f000)
Um die Profilierungsinformationen für die Laufzeitbibliothek zu erhalten, wird die Umgebungsvariable
LD_PROFILE mit dem Sonamen der Bibliothek definiert:
$ export LD_PROFILE=libdemo.so.1
Dann wird die Umgebungsvariable LD_PROFILE_OUTPUT mit dem Pfadnamen des Verzeichnisses, in dem die
Profilierungsausgabe geschrieben werden soll, definiert und das Verzeichnis erstellt, falls es nicht
bereits existiert:
$ export LD_PROFILE_OUTPUT=$(pwd)/prof_data
$ mkdir -p $LD_PROFILE_OUTPUT
LD_PROFILE führt dazu, dass die Profilierungsausgabe an die Ausgabedatei angehängt wird, falls diese
bereits existiert, daher wird jetzt sichergestellt, dass noch keine Profilierungsdaten existieren:
$ rm -f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile
Dann wird das Programm ausgeführt, um die Profilierungsausgabe zu erstellen, die dann in die Datei in dem
in LD_PROFILE_OUTPUT festgelegten Verzeichnis geschrieben wird:
$ LD_LIBRARY_PATH=. ./prog
$ ls prof_data
libdemo.so.1.profile
Anschließend wird die Option sprof -p verwandt, um ein flaches Profil mit Zählern und Ticks zu erstellen:
$ sprof -p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
Flat profile:
Each sample counts as 0.01 seconds.
% cumulative self self total
time seconds seconds calls us/call us/call name
60.00 0.06 0.06 100 600.00 consumeCpu1
40.00 0.10 0.04 1000 40.00 consumeCpu2
0.00 0.10 0.00 1 0.00 x1
0.00 0.10 0.00 1 0.00 x2
Die Option sprof -q erstellt einen Aufrufgraphen:
$ sprof -q libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
index % time self children called name
0.00 0.00 100/100 x1 [1]
[0] 100.0 0.00 0.00 100 consumeCpu1 [0]
-----------------------------------------------
0.00 0.00 1/1 <UNKNOWN>
[1] 0.0 0.00 0.00 1 x1 [1]
0.00 0.00 100/100 consumeCpu1 [0]
-----------------------------------------------
0.00 0.00 1000/1000 x2 [3]
[2] 0.0 0.00 0.00 1000 consumeCpu2 [2]
-----------------------------------------------
0.00 0.00 1/1 <UNKNOWN>
[3] 0.0 0.00 0.00 1 x2 [3]
0.00 0.00 1000/1000 consumeCpu2 [2]
-----------------------------------------------
Oberhalb und unterhalb der Zeichenketten »<UNKNOWN> werden Kennzeichner dargestellt, die außerhalb der
profilierten Bibliothek sind (in diesem Beispiel sind es Instanzen von main()).
Die Option sprof -c erstellt eine Liste der Aufrufpaare und ihrer Auftrittsanzahl.
$ sprof -c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
<UNKNOWN> x1 1
x1 consumeCpu1 100
<UNKNOWN> x2 1
x2 consumeCpu2 1000
SIEHE AUCH
gprof(1), ldd(1), ld.so(8)
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann <debian@helgefjell.de> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer
bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die
Mailingliste der Übersetzer.
Linux man-pages 6.9.1 15. Juni 2024 sprof(1)