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

NUME

       sprof - citește și afișează datele de profilare a obiectelor partajate

SINOPSIS

       sprof [opțiune]... rută-obiect-partajat [rută-date-profilare]

DESCRIERE

       Comanda  sprof  afișează  un  rezumat  al  profilării  pentru  obiectul  partajat  (biblioteca partajată)
       specificat ca prim argument al liniei de comandă. Rezumatul de profilare este creat  folosind  datele  de
       profilare  generate  anterior  în  cel de-al doilea argument (opțional) din linia de comandă. În cazul în
       care se omite ruta datelor de profilare, atunci sprof va încerca să le deducă folosind numele de  fiu  al
       obiectului partajat, căutând un fișier cu numele <soname>.profile în directorul curent.

OPȚIUNI

       Următoarele opțiuni ale liniei de comandă specifică rezultatul profilului care urmează să fie produs:

       --call-pairs
       -c     Afișează  o listă de perechi de rute de apelare pentru interfețele exportate de obiectul partajat,
              împreună cu numărul de ori de câte ori este utilizată fiecare rută.

       --flat-profile
       -p     Generează un profil plat al tuturor funcțiilor din obiectul monitorizat, cu numărători și ticuri.

       --graph
       -q     Generează graficul de apeluri.

       Dacă nu se specifică niciuna dintre opțiunile de mai sus, atunci comportamentul implicit este de a  afișa
       un profil plat și un grafic al apelurilor.

       Sunt disponibile următoarele opțiuni suplimentare pentru linia de comandă:

       --help
       -?     Afișează un rezumat al opțiunilor disponibile în linia de comandă și iese.

       --usage
              Afișează un scurt mesaj de utilizare și iese.

       --version
       -V     Afișează versiunea programului și iese.

STANDARDE

       GNU.

EXEMPLE

       Următorul exemplu demonstrează utilizarea sprof.  Exemplul constă într-un program principal care apelează
       două funcții dintr-un obiect partajat. Mai întâi, codul programului principal:

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

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

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

       Funcțiile  x1()  și  x2()  sunt  definite  în următorul fișier sursă care este utilizat pentru a construi
       obiectul partajat:

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

       Acum construim obiectul partajat cu numele real libdemo.so.1.1.0.1 și cu numele de fiu libdemo.so.1:

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

       Apoi, construim legături simbolice pentru numele  fiului  bibliotecii  și  pentru  numele  editorului  de
       legături al bibliotecii:

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

       În continuare, compilăm programul principal, legându-l de obiectul partajat și apoi enumerăm dependențele
       dinamice ale programului:

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

       Pentru  a  obține informații de profilare pentru obiectul partajat, definim variabila de mediu LD_PROFILE
       cu numele de fiu al bibliotecii:

           $ export LD_PROFILE=libdemo.so.1

       Apoi definim variabila de mediu LD_PROFILE_OUTPUT cu numele de rută al directorului în care ar trebui  să
       fie scrisă ieșirea profilului și creăm acel director dacă nu există deja:

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

       LD_PROFILE  determină  ca  ieșirea  de profilare să fie adăugată la fișierul de ieșire dacă acesta există
       deja, astfel încât să ne asigurăm că nu există date de profilare preexistente:

           $ rm -f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile

       Apoi executăm programul pentru a produce rezultatul  profilării,  care  este  scris  într-un  fișier  din
       directorul specificat în LD_PROFILE_OUTPUT:

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

       Apoi folosim opțiunea sprof -p pentru a genera un profil plat cu numărători și ticuri:

           $ sprof -p libdemo.so.1 $LD_PROFILE_OUTPUT/libdemo.so.1.profile
           Flat profile:

           Fiecare eșantion contează ca 0,01 secunde.
             %   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

       Opțiunea sprof -q generează un grafic de apeluri:

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

       Deasupra  și  dedesubt,  șirurile  „<UNKNOWN>” reprezintă identificatori care se află în afara obiectului
       profilat (în acest exemplu, acestea sunt instanțe ale main()).

       Opțiunea sprof -c generează o listă de perechi de apeluri și numărul de apariții ale acestora:

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

CONSULTAȚI ȘI

       gprof(1), ldd(1), ld.so(8)

TRADUCERE

       Traducerea   în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel    Chelu
       <remusgabriel.chelu@disroot.org>

       Această  traducere  este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3 sau o
       versiune  ulterioară  cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se   asumă   NICIO
       RESPONSABILITATE.

       Dacă  găsiți  erori  în  traducerea  acestui manual, vă rugăm să trimiteți un e-mail la translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                   15 iunie 2024                                         sprof(1)