我发现了问题“Is anyone using Valgrind and Qt?”,虽然这似乎澄清了一些事情,但我发现它所掌握的信息仍然是一个免费的问题。 我想知道的是为什么 - 当我调试我的应用程序时(尤其是Qt) - 我看不到对我创建的函数的引用?相反,我发现来自较低API(例如Qt)的大量信息似乎有很多内存泄漏。这是否意味着我的应用程序没有任何内存泄漏,或者它是否意味着有太多关于内存泄漏的信息,它首先针对较低级别的API,然后选择继续使用更高级别的代码?
我使用以下标志运行我的valgrind可执行文件:
valgrind --leak-check=full --show-reachable=yes -v ./HelloGL
此外,这到底是怎么回事?
ERROR SUMMARY: 925 errors from 899 contexts (suppressed: 29 from 7)
答案 0 :(得分:4)
我认为你的问题是调用树非常深。您可以使用以下方法调整报告的深度:
--num-callers=<number>
[默认值:12]指定标识程序位置的堆栈跟踪中显示的最大条目数。请注意,仅使用前四个功能位置(当前功能中的位置以及其三个直接呼叫者的位置)常见错误。因此,这不会影响报告的错误总数。
此值的最大值为50.请注意,较高的设置会使Valgrind运行速度稍慢并占用更多内存,但在处理具有深层嵌套调用链的程序时非常有用。
问题是Qt的内部问题还是由于您使用Qt引起的问题很难回答。但是,当呼叫跟踪无法返回到您的代码时,很难确定问题的确切位置。总的来说,你应该假设你的代码比Qt更容易出错。
关于错误摘要:valgrind
总共发现了954个错误。但是,其中29个来自已知会导致问题的函数,因此错误消息被抑制。事实上,这29个问题发生在已知导致问题的七个地点(功能,环境)中。其他925错误未被抑制,这意味着它们要么来自您的代码,要么是新发现的,在系统代码出错之前从未发现过。这些错误有899个单独的上下文(所以有很多不同的地方造成麻烦,只有很少的重复)。上下文是记录的调用链(产生特定错误的函数)的片段。所以,确定了很多问题。您只需要能够看到哪些功能触发了这些问题。