IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres éditeurs Discussion :

Autre que valgrind pour les fuites memoire


Sujet :

Autres éditeurs

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 79
    Points
    79
    Par défaut Autre que valgrind pour les fuites memoire
    Bonjour


    Je teste actuellement une application sous linux. Pour voir les fuites eventuelles de memoire, j'utilise valgrind ( la derniere version).

    Le soucie, c'est que dans la partie summary (la plus importante), j'ai par moment ceci :
    ==14649== 28,656 bytes in 1 blocks are possibly lost in loss record 212 of 215
    ==14649== at 0x4023294: operator new(unsigned) (vg_replace_malloc.c:224)
    ==14649== by 0x47E58C0: std::string::_Rep::_S_create(unsigned, unsigned, std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.9)
    ==14649== by 0x47E65A7: std::string::_Rep::_M_clone(std::allocator<char> const&, unsigned) (in /usr/lib/libstdc++.so.6.0.9)
    ==14649== by 0x47E71B7: std::string::reserve(unsigned) (in /usr/lib/libstdc++.so.6.0.9)
    ==14649== by 0x5B98578: ???
    ==14649== by 0x5B746C2: ???
    ==14649== by 0x5B63907: ???
    ==14649== by 0x5B64CE7: ???
    ==14649== by 0x5B6599D: ???
    ==14649== by 0x5B63619: ???
    ==14649== by 0x5BA9646: ???
    ==14649== by 0x5ADD9FB: ???
    Je suis presque sur que les ??? sont des instructions dans mon application... Et ??? n'est pas très parlant pour corriger un erreur.

    Je suis donc a la recherche d'un autre outils pour voir les fuites memoire.
    Je peux aussi faire tourner mon application sous windows si il existe de bon logiciel pour ca.

    Merci

    a bientot

    Ps: J'ai fait une mauvaise manip, je voulais mettre ce message dans le forum C et C++, pas uniquement dans le forum C (mon appli est en C++) dsl

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Valgrind est très bien mais tu devrais compiler ton application en debug. On ne voit pas les symboles de ton appli (gcc -g $(CFLAGS) -c fichier.c)
    http://valgrind.org/docs/manual/quick-start.html
    Sous Windows, les bons outils sont payants.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 192
    Points : 79
    Points
    79
    Par défaut
    Merci

    J'ai bien compiler mon applie comme avec -g et -c. J'ai toujours des ??? dans le summary.

    Est ce que tu as des nom des logiciels sous windows? et sous linux il n'y a rien d'autre que valgrind?

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    Sinon, tu peux coder la detection de fuites de memoires toi même avec un memory manager, principe expliqué ici : http://loulou.developpez.com/tutorie...eur3d/partie1/

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Valgrind est reconnu comme étant un très bon outil libre de recherche de fuites mémoires. Ensuite, il faut payer et il faut payer très cher pour des outils professionnels.

    J'ai plutôt l'impression que tes fuites de mémoire viennent de librairies tierces dont tu ne sembles pas avoir la maîtrise.
    Autre chose, j'espère que tu ne compiles pas en O2 mais uniquement en O0.

    Je me suis construis le petit example suivant. Une fois l'exécutable stripée, tu perds toute information sur les symboles. J'ai peur que dans ton cas, tu t'appuies sur des librairies dans lesquelles tu n'as aucune information de debug et qui souffrent de fuites mémoires.

    J'ai l'impression que tu testes une application que tu n'as pas écrite, non ? Et dont tu ne maîtrises pas forcément tous les dépendances ?

    Je trouve aussi très curieux que tu n'ais que des points d'interrogation. J'ai lancé valgrind sur une appli comme gedit. Il y a beaucoup de fuite mémoire mais il est au moins toujours capable de me dire dans quel exécutable ou quelle librairie a lieu la fuite mémoire. On dirait que toi non...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    // testvalgrind.cpp
     
    class A {
    public:
      int i;
    };
     
    A *createA () {
      A *a = new A ();
      a->i = 0;
      return a;
    }
     
    int main () {
      A *a = createA ();
      a->i = 1;
      return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    > valgrind --version
    valgrind-3.1.0-Debian
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    g++ -Wall -g -O0 -o testvalgrind testvalgrind.cpp
    valgrind --tool=memcheck --leak-check=full --show-reachable=yes ./testvalgrind
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ==5969== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1
    ==5969==    at 0x401C7F3: operator new(unsigned) (vg_replace_malloc.c:164)
    ==5969==    by 0x8048441: createA() (testvalgrind.cpp:7)
    ==5969==    by 0x804847A: main (testvalgrind.cpp:13)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++ -Wall -o testvalgrind testvalgrind.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ==6049== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1
    ==6049==    at 0x401C7F3: operator new(unsigned) (vg_replace_malloc.c:164)
    ==6049==    by 0x8048441: createA() (in /home/judi/testvalgrind)
    ==6049==    by 0x804847A: main (in /home/judi/testvalgrind)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    strip testvalgrind
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ==6073== 4 bytes in 1 blocks are definitely lost in loss record 1 of 1
    ==6073==    at 0x401C7F3: operator new(unsigned) (vg_replace_malloc.c:164)
    ==6073==    by 0x8048441: (within /home/judi/testvalgrind)
    ==6073==    by 0x804847A: (within /home/judi/testvalgrind)
    ==6073==    by 0x413FEA1: __libc_start_main (in /lib/tls/i686/cmov/libc-2.3.6.so)

Discussions similaires

  1. [proFTPd] Ecouter sur un autre port que 21 pour les transferts FTP
    Par razbitume dans le forum Administration système
    Réponses: 9
    Dernier message: 05/08/2009, 18h36
  2. Réponses: 4
    Dernier message: 15/02/2008, 09h48
  3. [2.0] Comment tracer les fuites mémoire ?
    Par StormimOn dans le forum C++/CLI
    Réponses: 9
    Dernier message: 02/11/2007, 07h22
  4. [AJAX] Que faire contre les fuites mémoires (memory leaks)
    Par cassy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/08/2007, 16h50
  5. Que Acces pour les mdb ?...
    Par gillouman dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 24/05/2005, 16h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo