Provided by: manpages-fr_4.15.0-9_all bug

NOM

       sprof - Lire et afficher les données de profilage des objets partagés

SYNOPSIS

       sprof [option]... chemin_objet_partagé [chemin_données_profil]

DESCRIPTION

       La  commande  sprof  affiche  un  résumé de profilage de l'objet (la bibliothèque) partagé
       indiqué comme premier paramètre de la ligne de commande. Le résumé du profilage est créé à
       partir  de données de profilage précédemment générées dans le second paramètre (optionnel)
       de la ligne de commande. Si le chemin vers les données  de  profilage  est  absent,  sprof
       tentera  de  le  déduire  à  partir  du  soname de l'objet partagé, en recherchant dans le
       répertoire actuel un fichier avec le nom <soname>.profile.

OPTIONS

       Les options suivantes de  la  ligne  de  commande  indiquent  la  sortie  de  profilage  à
       produire :

       -c, --call-pairs
              Afficher  une liste des paires de chemins d'appel pour les interfaces exportées par
              l'objet partagé, ainsi que le nombre de fois que chaque chemin est utilisé.

       -p, --flat-profile
              Générer un fichier de profilage plat de toutes les fonctions  de  l'objet  examiné,
              avec le nombre d'appels et de tics.

       -q, --graph
              Générer un graphe d'appels.

       Si  aucune  des  options  ci-dessus n'est spécifiée, le comportement par défaut consiste à
       afficher un profilage plat et un graphe des appels.

       Les options supplémentaires suivantes sont disponibles en ligne de commande :

       -?, --help
              Afficher un résumé des options et des paramètres  de  la  ligne  de  commande  puis
              quitter.

       --usage
              Afficher un court message d'aide puis quitter.

       -V, --version
              Afficher la version du programme puis quitter.

CONFORMITÉ

       La commande sprof est une extension GNU non présente dans POSIX.1.

EXEMPLES

       L'exemple suivant illustre l'utilisation de sprof. Il consiste dans un programme principal
       qui appelle deux fonctions d'un objet partagé. D'abord, le code du programme principal :

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

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

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

       Les fonctions x1()  et x2() sont définies dans le fichier  source  suivant,  utilisé  pour
       construire l'objet partagé :

           $ cat libdemo.c
           #include <unistd.h>

           void
           consumeCpu1(int lim)
           {
               for (int j = 0; j < lim; j++)
                getppid();
           }

           void
           x1(void) {
               for (int j = 0; j < 100; j++)
                consumeCpu1(200000);
           }

           void
           consumeCpu2(int lim)
           {
               for (int j = 0; j < lim; j++)
                getppid();
           }

           void
           x2(void)
           {
               for (int j = 0; j < 1000; j++)
                consumeCpu2(10000);
           }

       Maintenant,  nous  construisons  l'objet  partagé  avec le nom réel libdemo.so.1.0.1 et le
       soname libdemo.so.1 :

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

       Puis, nous construisons les liens symboliques pour le soname de la bibliothèque et le  nom
       de l'éditeur de liens de la bibliothèque :

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

       Ensuite,  nous  compilons  le programme principal en le liant à l'objet partagé, puis nous
       affichons les dépendances dynamiques du programme :

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

       Afin d'avoir les informations de  profilage  de  l'objet  partagé,  nous  positionnons  la
       variable d'environnement LD_PROFILE sur le soname de la bibliothèque :

           $ export LD_PROFILE=libdemo.so.1

       Puis,  nous  définissons  la  variable d'environnement LD_PROFILE_OUTPUT avec le chemin du
       répertoire où devrait être écrite la sortie de profilage et nous créons ce répertoire s'il
       n'existe pas encore :

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

       LD_PROFILE  a  pour  conséquence  que la sortie de profilage s'ajoute au fichier de sortie
       s'il  existe,  aussi  nous  nous  assurons  qu'il  n'y  a  pas  de  données  de  profilage
       préexistantes :

           $ rm -f $LD_PROFILE_OUTPUT/$LD_PROFILE.profile

       Puis,  nous  lançons  le  programme  pour  produire la sortie de profilage, écrite dans un
       fichier du répertoire indiqué dans LD_PROFILE_OUTPUT :

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

       Nous utilisons alors l'option sprof -p pour générer un fichier de profilage plat  avec  le
       nombre d'appels et de tics :

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

           Chaque échantillon est compté toutes les 0.01 secondes.
             %   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

       L'option sprof -q génère un graphe d'appel :

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

       Ci-dessus   et  ci-dessous,  les  chaînes  "<UNKNOWN>"  représentent  les  identifiants  à
       l'extérieur du fichier de l'objet examiné (dans cet exemple, il s'agit  des  instances  de
       main()).

       L'option  sprof  -c  génère  une  liste  d’une  paire  d’appels  et  du  nombre  de  leurs
       occurrences :

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

VOIR AUSSI

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

COLOPHON

       Cette page fait partie de la publication 5.13 du projet man-pages Linux.  Une  description
       du  projet et des instructions pour signaler des anomalies et la dernière version de cette
       page peuvent être trouvées à l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La traduction française  de  cette  page  de  manuel  a  été  créée  par  Gérard  Delafond
       <gerard@delafond.org>,    Alain   Portal   <aportal@univ-montp2.fr>,   Christophe   Blaess
       <https://www.blaess.fr/christophe/>,  David  Prévot  <david@tilapin.org>,  Denis   Barbier
       <barbier@debian.org>,  Florentin  Duneau  <fduneau@gmail.com>,  François  Micaux, Jean-Luc
       Coulon       (f5ibh)       <jean-luc.coulon@wanadoo.fr>,       Jean-Philippe       Guérard
       <fevrier@tigreraye.org>,    Julien   Cristau   <jcristau@debian.org>,   Nicolas   François
       <nicolas.francois@centraliens.net>,     Simon     Paillard     <simon.paillard@resel.enst-
       bretagne.fr>,     Stéphan     Rafin     <stephan.rafin@laposte.net>,    Thierry    Vignaud
       <tvignaud@mandriva.com>,    Thomas    Blein     <tblein@tblein.eu>,     Thomas     Huriaux
       <thomas.huriaux@gmail.com> et Jean-Philippe MENGUAL <jpmengual@debian.org>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General
       Public  License  version 3  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   concernant   les
       conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un
       message à ⟨debian-l10n-french@lists.debian.org⟩.