Provided by: manpages-fr-dev_3.57d1p1-1_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.

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.

EXEMPLE

       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[])
           {
               int j;

               mtrace();

               for (j = 0; j < 2; j++)
                   malloc(100);            /* Jamais libéré -- une fuite mémoire */

               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 3.57 du projet man-pages Linux.  Une  description
       du  projet  et  des  instructions  pour  signaler  des  anomalies  peuvent être trouvées à
       l'adresse http://www.kernel.org/doc/man-pages/.

TRADUCTION

       Depuis   2010,   cette   traduction   est   maintenue   à   l'aide   de    l'outil    po4a
       <http://po4a.alioth.debian.org/>  par l'équipe de traduction francophone au sein du projet
       perkamon <http://perkamon.alioth.debian.org/>.

       Thierry Vignaud (2002), Alain Portal <http://manpagesfr.free.fr/> (2006). Florentin Duneau
       et l'équipe francophone de traduction de Debian (2006-2009).

       Veuillez     signaler     toute     erreur     de     traduction     en     écrivant     à
       <debian-l10n-french@lists.debian.org>  ou  par  un  rapport  de  bogue   sur   le   paquet
       manpages-fr.

       Vous  pouvez  toujours  avoir  accès  à la version anglaise de ce document en utilisant la
       commande « man -L C <section> <page_de_man> ».