【问题标题】:Suppression files for Qt memory leaks with Valgrind使用 Valgrind 抑制 Qt 内存泄漏的文件
【发布时间】:2012-02-28 18:24:30
【问题描述】:

我通常用 C++ 编写我的类,并在 Linux 平台上使用 valgrind 检查它们是否泄漏内存。在释放所有堆内存之前我不满意。

开始用 Qt 编写,我发现 valgrind 检测到多少泄漏,也是在一个简单的项目中。它们太多了,很难检测到我同样的泄漏。

我在某处读到可能使用 valgrind 的抑制文件,这有助于过滤掉不需要的泄漏,但我找不到它。

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

【问题讨论】:

  • 我正在为 Qt5 编写一个抑制文件,现在已经抑制了 400000 个错误,但仍然看不到尽头。 :-(

标签: c++ qt memory-leaks valgrind suppress-warnings


【解决方案1】:

请注意,很多库都有内部分配结构,您永远无法清理,这很正常。

【讨论】:

    【解决方案2】:

    你看过this "Valgrind Suppression File Howto" wiki吗?

    为了记录,Qt 中有一些底层库(尤其是绘画过程中的库)总是泄漏少量内存。这些是你需要压制的。

    正如你所说,你应该首先创建一个最小的项目,运行它来创建一个 valgrind 抑制文件,然后将该抑制文件应用到你的项目中。

    【讨论】:

    • 谢谢。所以我应该首先创建一个最小的项目,运行它来创建一个 valgrind 抑制文件,然后将该抑制文件应用到我的项目中,对吧?
    【解决方案3】:

    我只是使用抑制文件来抑制从 Qt 库报告的所有内存,如下所示:

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

    【讨论】:

    • 这是个坏主意。我在自己的代码中发现了错误,其中实际的新调用来自 Qt 容器之一(QHash),所以如果你禁止所有 Qt 库,你会错过。
    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    • 2016-03-15
    • 2014-04-09
    相关资源
    最近更新 更多