Provided by: manpages-de_4.27.0-1_all bug

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: debian-l10n-german@lists.debian.org.

Linux man-pages 6.9.1                             15. Juni 2024                                         sprof(1)