Valgrind sous Snow Leopard

Si vous developpez en C ou C++, vous vous etes un jour ou l’autre confronté a des problemes liés a la géstion de la mémoire par vos applications et vous connaissez surement l’outil de profilage de la mémoire Valgrind (http://valgrind.org/). L’installation sous un Linux de valgrind est assez simple(apt-get install valgrind, pour ubuntu ou debian), par contre sous Mac OS X les choses ne sont pas si simples!

Voici donc la procédure que j’ai utilisé pour installer Valgrind sous Snow Leopard.

valgrind1.png

Récuperer les sources: pour cela placer vous dans un folder de votre choix (VALGRIND) par exemple:

mymac:Desktop Tarek$ mkdir VALGRIND
mymac:Desktop Tarek$ cd VALGRIND/
mymac:VALGRIND Tarek$ svn co svn://svn.valgrind.org/valgrind/tags/VALGRIND_3_5_0 valgrind

Le dossier ainsi crée contient alors le folder valgrind.

valgrind2.png

On récupere le patch de Greg Parker a partir du site KDE:

curl http://bugsfiles.kde.org/attachment.cgi?id=36999 > 10.6.patch

on déplace le patch vers le dossier valgrind:

mymac:VALGRIND Tarek$ mv 10.6.patch ./valgrind

valgrind3.png

On applique ensuite le patch:

mymac:VALGRIND Tarek$ cd valgrind
mymac:valgrind Tarek$ patch -p0 < 10.6.patch

Ensuite pour compiler (en mode 32 bits)

mymac:valgrind Tarek$ ./autogen.sh
mymac:valgrind Tarek$ ./configure
mymac:valgrind Tarek$ make

Pour le mode (64 bits):

mymac:valgrind Tarek$ ./autogen.sh
mymac:valgrind Tarek$ ./configure --build=amd64-darwin
mymac:valgrind Tarek$ make

et on install :

mymac:valgrind Tarek$ sudo make install

et apres on aura droit a ca:

mymac:Desktop Tarek$ which valgrind
/usr/local/bin/valgrind

valgrind4.png

Pour tester valgrind, on crée un petit fichier c, test.c:

#include <stdio.h>
#include <stdlib.h>

int main()
{
char * t = malloc(1024);
char * w = "TAREK";

t = w;

return 0;
}

On compile et on lance valgrind ensuite:

mymac:Desktop Tarek$ gcc -arch i386 test.c
mymac:Desktop Tarek$ valgrind --leak-check=full ./a.out
==4660== Memcheck, a memory error detector
==4660== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==4660== Using Valgrind-3.5.0 and LibVEX; rerun with -h for copyright info
==4660== Command: ./a.out
==4660==
--4660-- ./a.out:
--4660-- dSYM directory is missing; consider using --dsymutil=yes
==4660==
==4660== HEAP SUMMARY:
==4660==     in use at exit: 1,344 bytes in 8 blocks
==4660==   total heap usage: 8 allocs, 0 frees, 1,344 bytes allocated
==4660==
==4660== 1,024 bytes in 1 blocks are definitely lost in loss record 4 of 4
==4660==    at 0xF666: malloc (vg_replace_malloc.c:195)
==4660==    by 0x1F5E: main (in ./a.out)
==4660==
==4660== LEAK SUMMARY:
==4660==    definitely lost: 1,024 bytes in 1 blocks
==4660==    indirectly lost: 0 bytes in 0 blocks
==4660==      possibly lost: 0 bytes in 0 blocks
==4660==    still reachable: 320 bytes in 7 blocks
==4660==         suppressed: 0 bytes in 0 blocks
==4660== Reachable blocks (those to which a pointer was found) are not shown.
==4660== To see them, rerun with: --leak-check=full --show-reachable=yes
==4660==
==4660== For counts of detected and suppressed errors, rerun with: -v
==4660== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

Pour aller plus loin avec valgrind, je vous conseil un article de Linux Mag:
http://www.unixgarden.com/index.php/administration-systeme/corriger-votre-utilisation-memoire-avec-valgrind

Publicité

2 réflexions sur “Valgrind sous Snow Leopard

  1. Bonjour , merci pour le tuto mais j ‘ai un petit soucis quand j’utilise valgrind sur mon mac, même s’y je ne fait pas d’allocation cela me marque
    1 alloc , 0 frees , XXX bytes allocated

    Donc je voudrais savoir comment régler le petit souci car c’est un peu embêtant

    Merci d’avance

Votre commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s