我正在尝试使用 Qt/C++ 调试大型应用程序构建,而 valgrind 报告内部 Qt 内容存在大量内存泄漏。任何人都可以为 Qt 应用程序共享一个适当的 valgrind 抑制文件吗?
谢谢 !
例如。
#include <qobject.h>
int main()
{
QObject o;
return 0;
}
返回:
$ valgrind --leak-check=full --show-reachable=yes ./leak ==12655== Memcheck,内存错误检测器 ==12655== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward 等人。 ==12655== 使用 Valgrind-3.5.0-Debian 和 LibVEX;使用 -h 重新运行以获取版权信息 ==12655== 命令:./leak ==12655== ==12655== ==12655== 堆摘要: ==12655== 退出时使用:7 个块中的 744 个字节 ==12655== 总堆使用量:28 次分配,21 次释放,1,640 字节分配 ==12655== ==12655== 1 个块中的 16 个字节在丢失记录 1 of 7 中仍然可以访问 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== 0x6203124:QThreadData::current()(在 /usr/lib/libQtCore.so.4.5.2 中) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 1 个块中的 96 个字节在丢失记录 2 of 7 中仍然可以访问 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== by 0x62030FC: QThreadData::current() (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 1 个块中的 96 个字节在丢失记录 3 of 7 中仍然可以访问 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== by 0x62041CD: QWaitCondition::QWaitCondition() (在/usr/lib/libQtCore.so.4.5.2) ==12655== 由 0x6200EAF: ??? (在 /usr/lib/libQtCore.so.4.5.2 中) ==12655== 由 0x62010A0: ??? (在 /usr/lib/libQtCore.so.4.5.2 中) ==12655== by 0x6203132: QThreadData::current() (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 1 个块中的 120 个字节在丢失记录 4 of 7 中仍然可以访问 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== by 0x61FE681: QMutex::QMutex(QMutex::RecursionMode) (在/usr/lib/libQtCore.so.4.5.2) ==12655== 0x6200DC8:QThreadData::QThreadData(int)(在 /usr/lib/libQtCore.so.4.5.2 中) ==12655== by 0x620310C: QThreadData::current() (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 1 个块中的 120 个字节在丢失记录 5 of 7 中仍然可以访问 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== by 0x61FE681: QMutex::QMutex(QMutex::RecursionMode) (在/usr/lib/libQtCore.so.4.5.2) ==12655== 0x6200DE9:QThreadData::QThreadData(int)(在 /usr/lib/libQtCore.so.4.5.2 中) ==12655== by 0x620310C: QThreadData::current() (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 1 个块中的 120 个字节在丢失记录 6 of 7 中仍然可以访问 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== by 0x61FE681: QMutex::QMutex(QMutex::RecursionMode) (在/usr/lib/libQtCore.so.4.5.2) ==12655== 由 0x6200E77: ??? (在 /usr/lib/libQtCore.so.4.5.2 中) ==12655== 由 0x62010A0: ??? (在 /usr/lib/libQtCore.so.4.5.2 中) ==12655== by 0x6203132: QThreadData::current() (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 1 个块中的 176 个字节在丢失记录 7 of 7 中仍然可以访问 ==12655== at 0x4C229C7: operator new(unsigned long) (vg_replace_malloc.c:220) ==12655== 由 0x6201092: ??? (在 /usr/lib/libQtCore.so.4.5.2 中) ==12655== by 0x6203132: QThreadData::current() (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x62FC4BC: QObject::QObject(QObject*) (在/usr/lib/libQtCore.so.4.5.2) ==12655== by 0x4008D2: main (in /tmp/Qt/bin/leak) ==12655== ==12655== 泄漏摘要: ==12655== 肯定丢失:0 个块中的 0 个字节 ==12655== 间接丢失:0 个块中的 0 个字节 ==12655== 可能丢失:0 个块中的 0 个字节 ==12655== 仍然可以访问:7 个块中的 744 个字节 ==12655== 抑制:0 个块中的 0 个字节 ==12655== ==12655== 对于检测到和抑制的错误计数,重新运行:-v ==12655== 错误摘要:0 个上下文中的 0 个错误(抑制:8 个来自 8 个)