2012-02-07 70 views
7

我通常在C++中编写我的类并检查它们是否在Linux平台上使用valgrind泄漏内存。直到所有的堆内存都被释放后,我才满意。Valgrind的Qt内存泄漏抑制文件

开始在Qt中编写代码,我发现valgrind在一个简单的项目中检测到了多少泄漏。他们太多了,很难发现我的相同泄漏。

我读了一些可以使用valgrind压缩文件的地方,它有助于滤除不必要的泄漏,但是我找不到它。

我使用的是Ubuntu 11.04 x64,g ++ 4.5,Qt 4.7。 有人知道如何处理这个问题吗?

回答

6

您是否看过this "Valgrind Suppression File Howto" wiki

为了记录,Qt中有一些底层库(尤其是绘画过程中的底层库)总是会泄漏少量的内存。这些是你需要压制的。如你所说,你应该首先创建一个最小项目,运行它创建一个valgrind抑制文件,然后将该抑制文件应用到你的项目中。

+0

谢谢。所以我应该先创建一个最小化的项目,运行它创建一个valgrind抑制文件,然后将该抑制文件应用到我的项目中,对吗? – linello 2012-02-07 11:49:23

+1

是的,就是这样。 – UmNyobe 2012-02-07 12:11:50

0

请注意,很多图书馆有内部分配结构,你永远无法达到清理,这是正常的。

+0

一些很多泄漏没有符号可言! – linello 2012-02-07 12:15:28

-1

我刚开始使用抑制文件来抑制来自Qt库是这样报道的所有内存:

{ 
     <QtCore> 
     Memcheck:Leak 
     ... 
     obj:/usr/lib/x86_64-linux-gnu/libQtCore.so.4.8.6 
    } 

... 
+0

这是一个坏主意。我在自己的代码中发现了实际的新调用来自Qt容器之一(QHash)的错误,所以如果你禁止所有的Qt库,你将会错过它。 – 2017-01-13 04:31:15