2012-01-17 39 views
3

我发现这个问题:“Is anyone using Valgrind and Qt?”,虽然这似乎澄清了一些东西,我发现它举行仍可免费问题的信息。 我想知道的是为什么 - 当我调试我的应用程序(使用Qt,尤其是) - 我看不到,我已经创建函数的引用?相反,我发现来自较低API(如Qt)的大量信息似乎有很多内存泄漏。这是否意味着我的应用程序是无效的任何内存泄漏,或者这是否意味着有这么了解内存多的信息泄漏,它首先是针对较低级别的API,然后选择移动到更高级别的代码?使用Valgrind的,低级别的C++ API它们是巨型

我跑我的valgrind可执行文件,以下标志:

valgrind --leak-check=full --show-reachable=yes -v ./HelloGL 

而且,到底是什么了吗?

ERROR SUMMARY: 925 errors from 899 contexts (suppressed: 29 from 7) 

Pastebin

回答

4

我认为你的问题是,调用树是非常深的。可以调整使用报道的深度:

--num-callers=<number> [默认:12]

指定识别程序位置在栈跟踪示出的条目的最大数目。请注意,仅使用前四个功能位置(当前功能中的位置及其三个直接呼叫者的位置)共同出现错误。所以这不会影响报告的错误总数。

这种情况的最大值为50。注意,较高的设置将使Valgrind的运行得慢,并采取更多的内存,但与深度嵌套调用链的程序工作时会非常有用。

无论问题是Qt的内部还是被您对Qt的使用激起,都很难回答。但是,当通话记录无法回到您的代码时,就很难确定问题的真正原因。总的来说,你应该认为它比Qt更有可能是你的代码。

有关错误的总结:valgrind共发现954个错误。然而,其中29个来自已知会导致问题的功能,因此错误消息被抑制。事实上,这29个问题发生在已知会导致问题的七个地点(职能,背景)。其他925错误未被抑制,这意味着它们来自您的代码,或者是新发现的,在系统代码错误之前从未发现。对于这些错误,有899个单独的上下文(所以有很多不同的地方会造成麻烦,只有很少的重复)。上下文是记录的调用链(产生特定错误的函数)的一个片段。所以,发现了很多问题。你只需要能够看到你的哪些函数触发了这些问题。

相关问题