valgrind 是不是在 Debian Wheezy 上捕获 Qt 4.8 在极简主义应用程序中泄漏内存?

Posted

技术标签:

【中文标题】valgrind 是不是在 Debian Wheezy 上捕获 Qt 4.8 在极简主义应用程序中泄漏内存?【英文标题】:Is valgrind catching Qt 4.8 on Debian Wheezy leaking memory in minimalist app?valgrind 是否在 Debian Wheezy 上捕获 Qt 4.8 在极简主义应用程序中泄漏内存? 【发布时间】:2012-07-30 05:10:29 【问题描述】:

我在这里阅读了几个问题,人们通过 valgrind 运行最小的 Qt 程序并发布结果。查看输出的一般结论是“嗯,没有实际的泄漏,这就是 Qt 使用内存的方式”。

但是,我从一个基本上为空的应用程序中得到的结果看起来……更糟。例如,我正在“肯定丢失”泄漏:

https://gist.github.com/3204769

==32147== LEAK SUMMARY:
==32147==    definitely lost: 848 bytes in 11 blocks
==32147==    indirectly lost: 1,756 bytes in 53 blocks
==32147==      possibly lost: 1,720 bytes in 9 blocks
==32147==    still reachable: 121,019 bytes in 2,257 blocks
==32147==         suppressed: 0 bytes in 0 blocks

运行:

valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes ./testing 2> valgrind.log

我对这个设置有点了解,尝试获得一个相对较新的 C++11 编译 gcc:

Debian Wheezy 3.2.0-2-686-pae gcc (Debian 4.7.1-2) 4.7.1

如果我这样做 sudo kwrite --version 我会得到:

Qt: 4.8.1
KDE Development Platform: 4.8.4 (4.8.4)
KWrite: 4.8.3 (4.8.3)

有类似情况的人,或者知道这里发生了什么吗? :-/

【问题讨论】:

没有确切的警告,怎么知道? @FrankOsterfeld 确切的警告附在 GitHub gist 链接的最后一个文件中(除非你的意思是别的......?) 啊,我滚动到快。看起来静态字体配置数据没有被清除,没什么重要的。 【参考方案1】:

大部分内容似乎是您正在使用的库的内部“全局”状态。人们可能会争论通过“程序终止”来清理全局资源是否是一种好的方式,但如果做得好,它可能是可以的。我个人不喜欢它,因为它使检测真正的泄漏变得更加困难......

【讨论】:

以上是关于valgrind 是不是在 Debian Wheezy 上捕获 Qt 4.8 在极简主义应用程序中泄漏内存?的主要内容,如果未能解决你的问题,请参考以下文章

在 Valgrind 中是不是需要处理仍然可访问的内存?

[Python] Simple Decorators

[Python] Simple Decorators

Valgrind 标志,调试与发布编译

如何将 Valgrind 的输出重定向到文件?

Valgrind:致命错误:memcheck.h:没有这样的文件或目录