sprof(1)

NAVN
sprof - læs og vis delte objektprofileringsdata

SYNOPSIS
sprof [tilvalg]... delt-objekt-sti [profil-data-sti]

BESKRIVELSE
Kommandoen sprof viser en profileringsoversigt for det delte objekt (delt bibliotek) angivet som dets første kommandolinjeargument. Profileringsoversigten oprettes via tidligere oprettede profileringsdata i det (valgfrie) andet kommandolinjeargument. Hvis profileringsdatastinavnet udelades, så vil sprof forsøge at udlede denne via soname for det delte objekt, kiggende efter en fil med navnet <soname>.profile i den nuværende mappe.

TILVALG
De følgende kommandolinjetilvalg angiver profilresultatet:

--call-pairs
-c
    Vis en liste af par for kaldstier for grænsefladerne eksporteret af det delte objekt, sammen med antallet af gange hver sti anvendes.

--flat-profile
-p
    Opret en flad profil for alle funktonerne i det overvågede objekt, med antal og krydser.

--graph
-q
    Opret en kaldgraf.

Hvis ingen af de ovenstående tilvalg er angivet, så er standardopførelsen at vise en flad profil og en kaldgraf.

De følgende yderligere tilvalg for kommandolinjen er tilgængelige:

--help
-?
    Vis en summering af tilvalg for kommandolinjen samt argumenter og afslut.

--usage
    Vis en kort hjælpetekst og afslut.

--version
-V
    Vis programversionen og afslut.

STANDARDER
GNU.

EKSEMPLER
Det følgende eksempel viser brugen af sprof. Eksemplet består af et hovedprogram, der kalder to funktioner i et delt objekt. Først koden for hovedprogrammet:

    $ cat prog.c
    #include <stdlib.h>

    void x1(void);
    void x2(void);

    int
    main(int argc, char *argv[])
    {
        x1();
        x2();
        exit(EXIT_SUCCESS);
    }

Funktionerne x1() og x2() er defineret i den følgende kildefil, der bruges til at konstruere det delte objekt:

    $ 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);
    }

Nu konstruerer vi det delte objekt med det reelle navn libdemo.so.1.0.1 og soname libdemo.so.1:

    $ cc -g -fPIC -shared -Wl,-soname,libdemo.so.1 \
            -o libdemo.so.1.0.1 libdemo.c

Så konstruerer vi symbolske henvisninger for biblioteket soname og henvisingsnavnet for biblioteket:

    $ ln -sf libdemo.so.1.0.1 libdemo.so.1
    $ ln -sf libdemo.so.1 libdemo.so

Efterfølgende kompilerer vi hovedprogrammet, henviser det til det delte objekt og viser de dynamiske afhængigheder for programmet:

    $ 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)

For at indhente profileringsinformation for det delte objekt definerer vi miljøvariablen LD_PROFILE med soname for biblioteket:

    $ export LD_PROFILE=libdemo.so.1

Så definerer vi miljøvariablen LD_PROFILE_OUTPUT med stinavnet for mappen, hvor profilresultatet skal skrives, og opretter den mappe, hvis den ikke allerede findes:

    $ export LD_PROFILE_OUTPUT=$(pwd)/prof_data
    $ mkdir -p $LD_PROFILE_OUTPUT

LD_PROFILE gør at profileringsresultatet tilføjes til resultatfilen, hvis den allerede findes, så vi sikrer, at der ikke er allerede er præprofileringsdata:

    $ rm -f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile

Så afvikler vi programmet for at lave profileringsresultatet, der skrives til en fil i mappen angivet i LD_PROFILE_OUTPUT:

    $ LD_LIBRARY_PATH=. ./prog
    $ ls prof_data
    libdemo.so.1.profile

Vi bruger så tilvalget sprof -p til at oprette en flad profil med antal og krydser:

    $ 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

Tilvalget sprof -q opretter en kaldgraf:

    $ 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]
    -----------------------------------------------

Over og under, strengene »<UNKNOWN>« repræsenterer identifikatorer, der er uden for det profilerede objekt (i dette eksempel er disse instanser af main()).

Tilvalget sprof -c opretter en list af kaldpar og antallet af deres forekomster:

    $ sprof -c libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
    <UNKNOWN>                  x1                                 1
    x1                         consumeCpu1                      100
    <UNKNOWN>                  x2                                 1
    x2                         consumeCpu2                     1000

SE OGSÅ
gprof(1), ldd(1), ld.so(8)

OVERSÆTTELSE
Oversættere af denne manual til dansk Joe Hansen <joedalton2@yahoo.dk>

Denne oversættelse er gratis dokumentation; læs GNU General Public License version 3 (https://www.gnu.org/licenses/gpl-3.0.html) eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR.

Hvis du støder på fejl i oversættelsen af ​​denne vejledning, skal du sende en besked til debian-l10n-danish@lists.debian.org.