Provided by: manpages-fr-dev_4.13-4_all bug

NOM

       mtrace, muntrace - Suivi de malloc

SYNOPSIS

       #include <mcheck.h>

       void mtrace(void);

       void muntrace(void);

DESCRIPTION

       La  fonction  mtrace()  installe  des  fonctions  de  rappel (« hook ») pour les fonctions
       d'allocation mémoire malloc(3), realloc(3)  memalign(3),  et  free(3).  Ces  fonctions  de
       rappel  enregistrent  l'historique  des  allocations  et  désallocations  de  mémoire. Ces
       informations permettent de découvrir des fuites mémoire ou des libérations de mémoire  non
       allouée dans un programme.

       La  fonction  muntrace()  désactive  les  fonctions  de  rappel  (« hook ») installées par
       mtrace() afin d'arrêter l'enregistrement des appels aux fonction d'allocation mémoire.  Si
       aucune fonction de rappel n'était installée par mtrace(), muntrace() ne fait rien.

       Lors  de l'appel à mtrace(), la valeur de la variable d'environnement MALLOC_TRACE est lue
       pour y trouver le chemin du fichier où enregistrer l'historique des appels. Si ce  fichier
       est correctement ouvert, il est remis à zéro.

       Si  MALLOC_TRACE  n'est pas définie, ou si le chemin passé en paramètre est invalide ou ne
       peut pas être écrit, alors aucune fonction de rappel (« hook ») n'est installé et mtrace()
       n'aura  pas  d'effet.  Pour  les  programmes  setuid ou setgid, MALLOC_TRACE est ignoré et
       mtrace() n'est pas d'effet.

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).

       ┌─────────────────────┬──────────────────────┬───────────┐
       │InterfaceAttributValeur    │
       ├─────────────────────┼──────────────────────┼───────────┤
       │mtrace(), muntrace() │ Sécurité des threads │ MT-Unsafe │
       └─────────────────────┴──────────────────────┴───────────┘

CONFORMITÉ

       Ces fonctions sont des extensions GNU.

NOTES

       En utilisation habituelle, mtrace() est  appelé  une  fois  au  début  de  l'exécution  du
       programme, et muntrace() n'est jamais appelé.

       La  sortie  produite  lors d'un appel à mtrace() est sous forme de texte, mais n'a pas été
       prévue pour être lisible par un humain. La bibliothèque GNU  C  fournit  un  script  Perl,
       mtrace(1),  qui  interprète  l'enregistrement  des  appels  mémoire  et affiche une sortie
       lisible. Pour de meilleurs résultats, le programme instrumenté devrait être  compilé  avec
       les symboles de débogage, afin que les numéros de ligne soient inscrits dans l'exécutable.

       Le suivi des appels d'allocation mémoire effectué par mtrace() pénalise les performances.

BOGUES

       Le  numéro  de  ligne  indiqué  par  mtrace(1)  n'est  pas toujours précis : il peut faire
       référence à la ligne de code (non vide) précédente ou suivante.

EXEMPLES

       L'exemple de session suivant montre comment utiliser la fonction mtrace() et  la  commande
       mtrace(1) dans un programme qui renferme des fuites mémoire à deux endroits différents.

           $ cat t_mtrace.c
           #include <mcheck.h>
           #include <stdlib.h>
           #include <stdio.h>

           int
           main(int argc, char *argv[])
           {
               mtrace();

               for (int j = 0; j < 2; j++)
                   malloc(100);            /* Never freed--a memory leak */

               calloc(16, 16);             /* Jamais libéré -- une fuite mémoire */
               exit(EXIT_SUCCESS);
           }

       Lorsque  ce  programme  est  exécuté  comme  ci-dessous,  mtrace() diagnostique des fuites
       mémoire à deux endroits différents.

           $ cc -g t_mtrace.c -o t_mtrace
           $ export MALLOC_TRACE=/tmp/t
           $ ./t_mtrace
           $ mtrace ./t_mtrace $MALLOC_TRACE
           Memory not freed:
           -----------------
              Address     Size     Caller
           0x084c9378     0x64  at /home/cecilia/t_mtrace.c:12
           0x084c93e0     0x64  at /home/cecilia/t_mtrace.c:12
           0x084c9448    0x100  at /home/cecilia/t_mtrace.c:16

       Les deux premiers messages liés à la mémoire non libérée correspondent aux deux  appels  à
       malloc(3) dans la boucle for. Le dernier message correspond à l'appel calloc(3) (qui à son
       tour appelle malloc(3)).

VOIR AUSSI

       mtrace(1), malloc(3), malloc_hook(3), mcheck(3)

COLOPHON

       Cette page fait partie de la publication 5.10 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  Christophe  Blaess
       <https://www.blaess.fr/christophe/>,  Stéphan  Rafin  <stephan.rafin@laposte.net>, Thierry
       Vignaud <tvignaud@mandriva.com>, François Micaux, Alain  Portal  <aportal@univ-montp2.fr>,
       Jean-Philippe    Guérard   <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-
       luc.coulon@wanadoo.fr>,   Julien    Cristau    <jcristau@debian.org>,    Thomas    Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin
       Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>,  Denis
       Barbier <barbier@debian.org> et David Prévot <david@tilapin.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 ⟨⟩.