.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2014 Michael Kerrisk .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH sprof 1 "3. Mai 2023" "Linux man\-pages 6.05.01" .SH BEZEICHNUNG sprof \- Daten der Laufzeitbibliothek lesen und anzeigen .SH ÜBERSICHT .nf \fBsprof\fP [\fIOption\fP]… \fILaufzeitbibliothekpfad\fP [\fIProfilierungsdatenpfad\fP] .fi .SH BESCHREIBUNG Der Befehl \fBsprof\fP 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 \fBsprof\fP versuchen, ihn mittels des Sonamens der Laufzeitbibliothek abzuleiten, indem es nach einer Datei mit dem Namen \fI.profile\fP im aktuellen Verzeichnis sucht. .SH OPTIONEN Die folgenden Befehlszeilenoptionen geben an, welche Profilierungsausgabe erstellt werden soll: .TP \fB\-c\fP, \fB\-\-call\-pairs\fP Gibt eine Liste von Paaren von Aufrufpfaden für die durch die Laufzeitbibliothek exportierten Schnittstellen aus, zusammen mit der Anzahl der Verwendungen jedes Pfades. .TP \fB\-p\fP, \fB\-\-flat\-profile\fP Erstellt ein flaches Profil aller Funktionen in dem überwachten Objekt, mit Zählern und Ticks. .TP \fB\-q\fP, \fB\-\-graph\fP Erstellt einen Aufrufgraphen. .PP Falls keine der obigen Optionen angegeben ist, dann ist das Standardverhalten die Anzeige eines flachen Profils und eines Aufrufgraphen. .PP Die folgenden zusätzlichen Befehlszeilenoptionen sind verfügbar: .TP \fB\-?\fP, \fB\-\-help\fP Zeigt eine Zusammenfassung der Befehlszeilenoptionen und \-argumente und beendet das Programm. .TP \fB\-\-usage\fP Zeigt eine kurze Gebrauchsinformation und beendet sich. .TP \fB\-V\fP, \fB\-\-version\fP Zeigt die Programmversion an und beendet das Programm. .SH STANDARDS GNU. .SH BEISPIELE Das folgende Beispiel zeigt die Verwendung von \fBsprof\fP. Das Beispiel besteht aus einem Hauptprogramm, das zwei Funktionen in einer Laufzeitbibliothek aufruft. Zuerst der Code des Hauptprogramms: .PP .in +4n .EX $ \fBcat prog.c\fP #include \& void x1(void); void x2(void); \& int main(int argc, char *argv[]) { x1(); x2(); exit(EXIT_SUCCESS); } .EE .in .PP Die Funktionen \fIx1\fP() und \fIx2\fP() sind in der folgenden Quelldatei definiert, die zur Erstellung der Laufzeitbibliothek verwandt wird: .PP .in +4n .EX $ \fBcat libdemo.c\fP #include \& 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); } .EE .in .PP Jetzt wird die Laufzeitbibliothek mit dem echten Namen \fIlibdemo.so.1.0.1\fP und dem Sonamen \fIlibdemo.so.1\fP erstellt: .PP .in +4n .EX $ \fBcc \-g \-fPIC \-shared \-Wl,\-soname,libdemo.so.1 \e\fP \fB\-o libdemo.so.1.0.1 libdemo.c\fP .EE .in .PP Dann werden symbolische Links für die Bibliothek\-Sonamen und den Bibliothek\-Linkernamen konstruiert: .PP .in +4n .EX $ \fBln \-sf libdemo.so.1.0.1 libdemo.so.1\fP $ \fBln \-sf libdemo.so.1 libdemo.so\fP .EE .in .PP Dann wird das Hauptprogramm kompiliert, gegen die Laufzeitbibliothek gelinkt und dann die dynamischen Abhängigkeiten des Programms aufgelistet: .PP .in +4n .EX $ \fBcc \-g \-o prog prog.c \-L. \-ldemo\fP $ \fBldd prog\fP 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) .EE .in .PP Um die Profilierungsinformationen für die Laufzeitbibliothek zu erhalten, wird die Umgebungsvariable \fBLD_PROFILE\fP mit dem Sonamen der Bibliothek definiert: .PP .in +4n .EX $ \fBexport LD_PROFILE=libdemo.so.1\fP .EE .in .PP Dann wird die Umgebungsvariable \fBLD_PROFILE_OUTPUT\fP mit dem Pfadnamen des Verzeichnisses, in dem die Profilierungsausgabe geschrieben werden soll, definiert und das Verzeichnis erstellt, falls es nicht bereits existiert: .PP .in +4n .EX $ \fBexport LD_PROFILE_OUTPUT=$(pwd)/prof_data\fP $ \fBmkdir \-p $LD_PROFILE_OUTPUT\fP .EE .in .PP \fBLD_PROFILE\fP führt dazu, dass die Profilierungsausgabe an die Ausgabedatei \fIangehängt\fP wird, falls diese bereits existiert, daher wird jetzt sichergestellt, dass noch keine Profilierungsdaten existieren: .PP .in +4n .EX $ \fBrm \-f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile\fP .EE .in .PP Dann wird das Programm ausgeführt, um die Profilierungsausgabe zu erstellen, die dann in die Datei in dem in \fBLD_PROFILE_OUTPUT\fP festgelegten Verzeichnis geschrieben wird: .PP .in +4n .EX $ \fBLD_LIBRARY_PATH=. ./prog\fP $ \fBls prof_data\fP libdemo.so.1.profile .EE .in .PP Anschließend wird die Option \fBsprof \-p\fP verwandt, um ein flaches Profil mit Zählern und Ticks zu erstellen: .PP .in +4n .EX $ \fBsprof \-p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile\fP 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 .EE .in .PP Die Option \fBsprof \-q\fP erstellt einen Aufrufgraphen: .PP .in +4n .EX $ \fBsprof \-q libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile\fP \& 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 [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 [3] 0.0 0.00 0.00 1 x2 [3] 0.00 0.00 1000/1000 consumeCpu2 [2] \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .EE .in .PP Oberhalb und unterhalb der Zeichenketten » werden Kennzeichner dargestellt, die außerhalb der profilierten Bibliothek sind (in diesem Beispiel sind es Instanzen von \fImain()\fP). .PP Die Option \fBsprof \-c\fP erstellt eine Liste der Aufrufpaare und ihrer Auftrittsanzahl. .PP .in +4n .EX $ \fBsprof \-c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile\fP x1 1 x1 consumeCpu1 100 x2 1 x2 consumeCpu2 1000 .EE .in .SH "SIEHE AUCH" \fBgprof\fP(1), \fBldd\fP(1), \fBld.so\fP(8) .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .