Est ce que quelqu'un à l'aide de valgrind et Qt?
Je suis en train de déboguer une grande compilation de l'application à l'aide de Qt/C++ et valgrind est la déclaration d'un lot de fuite de mémoire interne Qt choses.
Quelqu'un pourrait-il partager un bon valgrind de suppression de fichiers pour les applications Qt ?
Merci !
Par exemple.
#include <qobject.h>
int main()
{
QObject o;
return 0;
}
retourne:
$ valgrind --leak-check=full --show-accessible=oui ./fuite ==12655== Memcheck, une erreur de mémoire détecteur de ==12655== Copyright (C) 2002-2009, et de la GNU GPL, par Julian Seward et coll. ==12655== Utilisation de Valgrind-3.5.0-Debian et LibVEX; recourir avec -h pour les informations de copyright ==12655== Commande: ./fuite ==12655== ==12655== ==12655== TAS RÉSUMÉ: ==12655== en cours d'utilisation à la sortie: 744 octets dans 7 blocs ==12655== total de l'utilisation du tas: 28 allocations, 21 libère, de 1 640 octets alloués ==12655== ==12655== 16 octets 1 blocs sont toujours accessible dans la perte de l'enregistrement 1 de 7 ==12655== au 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== par 0x6203124: QThreadData::current() (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x62FC4BC: QObject::QObject(QObject*) (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x4008D2: principal (dans /tmp/Qt/bin/fuite) ==12655== ==12655== 96 octets 1 blocs sont accessible en perte record de 2 de 7 ==12655== au 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== par 0x62030FC: QThreadData::current() (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x62FC4BC: QObject::QObject(QObject*) (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x4008D2: principal (dans /tmp/Qt/bin/fuite) ==12655== ==12655== 96 octets 1 blocs sont accessible en perte record de 3 de 7 ==12655== au 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== par 0x62041CD: QWaitCondition::QWaitCondition() (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x6200EAF: ??? (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x62010A0: ??? (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x6203132: QThreadData::current() (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x62FC4BC: QObject::QObject(QObject*) (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x4008D2: principal (dans /tmp/Qt/bin/fuite) ==12655== ==12655== 120 octets 1 blocs sont accessible en perte record de 4 de 7 ==12655== au 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== par 0x61FE681: QMutex::QMutex(QMutex::RecursionMode) (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x6200DC8: QThreadData::QThreadData(int) (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x620310C: QThreadData::current() (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x62FC4BC: QObject::QObject(QObject*) (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x4008D2: principal (dans /tmp/Qt/bin/fuite) ==12655== ==12655== 120 octets 1 blocs sont toujours accessible dans la perte de l'enregistrement 5 de 7 ==12655== au 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== par 0x61FE681: QMutex::QMutex(QMutex::RecursionMode) (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x6200DE9: QThreadData::QThreadData(int) (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x620310C: QThreadData::current() (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x62FC4BC: QObject::QObject(QObject*) (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x4008D2: principal (dans /tmp/Qt/bin/fuite) ==12655== ==12655== 120 octets 1 blocs sont accessible en perte record de 6 de 7 ==12655== au 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== par 0x61FE681: QMutex::QMutex(QMutex::RecursionMode) (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x6200E77: ??? (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x62010A0: ??? (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x6203132: QThreadData::current() (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x62FC4BC: QObject::QObject(QObject*) (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x4008D2: principal (dans /tmp/Qt/bin/fuite) ==12655== ==12655== 176 octets 1 blocs sont accessible en perte record de 7 de 7 ==12655== au 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== par 0x6201092: ??? (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x6203132: QThreadData::current() (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x62FC4BC: QObject::QObject(QObject*) (dans /usr/lib/libQtCore..4.5.2) ==12655== par 0x4008D2: principal (dans /tmp/Qt/bin/fuite) ==12655== ==12655== FUITE RÉSUMÉ: ==12655== définitivement perdu: 0 octets 0 blocs ==12655== indirectement perdu: 0 octets 0 blocs ==12655== peut-être perdu: 0 octets 0 blocs ==12655== toujours accessible: 744 octets dans 7 blocs ==12655== supprimé: 0 octets 0 blocs ==12655== ==12655== Pour le compte de détecté et supprimé les erreurs, exécutez à nouveau avec: -v ==12655== ERREUR RÉSUMÉ: 0 erreurs de 0 contextes (supprimée: 8 de 8)
OriginalL'auteur malat | 2009-10-20
Vous devez vous connecter pour publier un commentaire.
--show-accessible montre la mémoire qui n'a pas réellement de fuite, même si valgrind les appels pour une perte record. Votre application de test n'a pas de fuite de mémoire.
Vous n'avez pas besoin de tout valgrind les suppressions de ce cas particulier. Pour les autres, peut-être, mais vous devez utiliser valgrind --gen-suppressions option pour générer ces suppressions de vous.
OriginalL'auteur mattr-
Si vous relâchez QObject o? Faire toujours le même résultat?
Mise à jour: Juste pour préciser, ce mémoire sera libérée par le système d'exploitation lorsque vous fermez l'application (si elle n'est pas une fuite).
Cependant, pour vous propre intérêt, il est toujours bon d'écrire un destructeur qui libère la mémoire, et il se sent toujours agréable de savoir que vous avez le contrôle sur ce qui est alloué et libéré.
(de sorte que vous ne finissent pas avec de vraies fuites de mémoire...)
+1 :): j'ai trouvé que, pour être de précieuses informations, personnellement.
OriginalL'auteur Johan
Ci-dessus valgrind rapports du journal d'0 fuites, c'est à dire il y sont pas d'erreurs.
OriginalL'auteur rohanpm