Estoy tratando de depurar una gran compilación de aplicaciones usando Qt/C++ y valgrind está reportando una gran cantidad de pérdida de memoria de cosas internas de Qt. ¿Alguien podría compartir un archivo de supresión de valgrind adecuado para aplicaciones Qt?¿Alguien está usando valgrind y Qt?
Gracias!
Por ejemplo.
#include <qobject.h>
int main()
{
QObject o;
return 0;
}
devuelve:
$ valgrind --leak-check=full --show-reachable=yes ./leak ==12655== Memcheck, a memory error detector ==12655== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al. ==12655== Using Valgrind-3.5.0-Debian and LibVEX; rerun with -h for copyright info ==12655== Command: ./leak ==12655== ==12655== ==12655== HEAP SUMMARY: ==12655== in use at exit: 744 bytes in 7 blocks ==12655== total heap usage: 28 allocs, 21 frees, 1,640 bytes allocated ==12655== ==12655== 16 bytes in 1 blocks are still reachable in loss record 1 of 7 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== by 0x6203124: QThreadData::current() (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 96 bytes in 1 blocks are still reachable in loss record 2 of 7 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== by 0x62030FC: QThreadData::current() (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 96 bytes in 1 blocks are still reachable in loss record 3 of 7 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== by 0x62041CD: QWaitCondition::QWaitCondition() (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x6200EAF: ??? (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62010A0: ??? (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x6203132: QThreadData::current() (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 120 bytes in 1 blocks are still reachable in loss record 4 of 7 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== by 0x61FE681: QMutex::QMutex(QMutex::RecursionMode) (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x6200DC8: QThreadData::QThreadData(int) (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x620310C: QThreadData::current() (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 120 bytes in 1 blocks are still reachable in loss record 5 of 7 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== by 0x61FE681: QMutex::QMutex(QMutex::RecursionMode) (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x6200DE9: QThreadData::QThreadData(int) (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x620310C: QThreadData::current() (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 120 bytes in 1 blocks are still reachable in loss record 6 of 7 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== by 0x61FE681: QMutex::QMutex(QMutex::RecursionMode) (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x6200E77: ??? (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62010A0: ??? (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x6203132: QThreadData::current() (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 176 bytes in 1 blocks are still reachable in loss record 7 of 7 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== by 0x6201092: ??? (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x6203132: QThreadData::current() (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (in /usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== LEAK SUMMARY: ==12655== definitely lost: 0 bytes in 0 blocks ==12655== indirectly lost: 0 bytes in 0 blocks ==12655== possibly lost: 0 bytes in 0 blocks ==12655== still reachable: 744 bytes in 7 blocks ==12655== suppressed: 0 bytes in 0 blocks ==12655== ==12655== For counts of detected and suppressed errors, rerun with: -v ==12655== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 8 from 8)
Siéntase libre de comentar si ha votado negativamente .... No veo ningún problema con que los usuarios deban liberar la memoria que asignan (incluso si está oculta en una gran cantidad de qt) – Johan
+1 en :) : Encontré esa información valiosa, personalmente. – zeboidlund