我正在尝试使用Qt/C++调试大型应用程序构建,而valgrind报告了内部Qt内容的大量内存泄漏.任何人都可以为Qt应用程序共享适当的valgrind抑制文件吗?
谢谢 !
例如.
#includeint main() { QObject o; return 0; }
收益:
$ 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)
mattr-.. 5
--show-reachable显示实际上没有泄露的内存,即使valgrind将其称为丢失记录.您的测试应用程序不会泄漏任何内存.
对于这种特殊情况,您不需要任何valgrind抑制.对于其他人,也许,但你应该使用valgrind的--gen-suppressions选项来为你生成这些抑制.
--show-reachable显示实际上没有泄露的内存,即使valgrind将其称为丢失记录.您的测试应用程序不会泄漏任何内存.
对于这种特殊情况,您不需要任何valgrind抑制.对于其他人,也许,但你应该使用valgrind的--gen-suppressions选项来为你生成这些抑制.