mtrace(3) Library Functions Manual mtrace(3) NOM mtrace, muntrace - Suivi de malloc BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include void mtrace(void); void muntrace(void); DESCRIPTION La fonction mtrace() installe des fonctions de rappel (<< hook >>) pour les fonctions d'allocation memoire malloc(3), realloc(3) memalign(3), et free(3). Ces fonctions de rappel enregistrent l'historique des allocations et desallocations de memoire. Ces informations permettent de decouvrir des fuites memoire ou des liberations de memoire non allouee dans un programme. La fonction muntrace() desactive les fonctions de rappel (<< hook >>) installees par mtrace() afin d'arreter l'enregistrement des appels aux fonction d'allocation memoire. Si aucune fonction de rappel n'etait installee par mtrace(), muntrace() ne fait rien. Lors de l'appel a mtrace(), la valeur de la variable d'environnement MALLOC_TRACE est lue pour y trouver le chemin du fichier ou enregistrer l'historique des appels. Si ce fichier est correctement ouvert, il est remis a zero. Si MALLOC_TRACE n'est pas definie, ou si le chemin passe en parametre est invalide ou ne peut pas etre ecrit, alors aucune fonction de rappel (<< hook >>) n'est installe et mtrace() n'aura pas d'effet. Pour les programmes setuid ou setgid, MALLOC_TRACE est ignore et mtrace() n'est pas d'effet. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +-------------------------------+--------------------------+-----------+ |Interface | Attribut | Valeur | +-------------------------------+--------------------------+-----------+ |mtrace(), muntrace() | Securite des threads | MT-Unsafe | +-------------------------------+--------------------------+-----------+ STANDARDS GNU. NOTES En utilisation habituelle, mtrace() est appele une fois au debut de l'execution du programme, et muntrace() n'est jamais appele. La sortie produite lors d'un appel a mtrace() est sous forme de texte, mais n'a pas ete prevue pour etre lisible par un humain. La bibliotheque GNU C fournit un script Perl, mtrace(1), qui interprete l'enregistrement des appels memoire et affiche une sortie lisible. Pour de meilleurs resultats, le programme instrumente devrait etre compile avec les symboles de debogage, afin que les numeros de ligne soient inscrits dans l'executable. Le suivi des appels d'allocation memoire effectue par mtrace() penalise les performances. BOGUES Le numero de ligne indique par mtrace(1) n'est pas toujours precis : il peut faire reference a la ligne de code (non vide) precedente 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 memoire a deux endroits differents. $ cat t_mtrace.c #include #include #include int main(void) { mtrace(); for (unsigned int j = 0; j < 2; j++) malloc(100); /* Never freed--a memory leak */ calloc(16, 16); /* Never freed--a memory leak */ exit(EXIT_SUCCESS); } Lorsque ce programme est execute comme ci-dessous, mtrace() diagnostique des fuites memoire a deux endroits differents. $ 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 lies a la memoire non liberee correspondent aux deux appels a malloc(3) dans la boucle for. Le dernier message correspond a l'appel calloc(3) (qui a son tour appelle malloc(3)). VOIR AUSSI mtrace(1), malloc(3), malloc_hook(3), mcheck(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier et David Prevot Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 mtrace(3)