在本页

使用 Memcheck 检测内存泄漏

利用Valgrind 工具套件中的 Memcheck 工具,您可以检测应用程序中与内存管理相关的问题。将该工具与 GDB 调试器一起使用。检测到问题时,应用程序将被中断,你可以对其进行调试。

注意: 可以在 Linux 本地安装并运行 Memcheck。您可以从任何计算机在远程主机或设备上运行它。在 Windows 上,可以使用Heob堆观察器获得类似的结果。

下载并安装 Valgrind 工具后,可以从Qt Creator 使用 Memcheck。

检测应用程序中的内存泄漏:

  1. 进入Projects 模式,选择调试构建配置。
  2. 在模式选择器中,选择Debug >Memcheck

    内存检查视图

  3. 选择开始 启动应用程序。
  4. 使用应用程序进行分析。
  5. 选择停止 ,在Memory Issues 中查看分析结果。

查看内存问题

当应用程序运行时,Memcheck 会执行以下操作:

  • 检查所有内存读写。
  • 拦截分配或释放内存或创建或删除内存块的调用。

当停止 Memcheck 时,您可以看到结果。Qt Creator 将问题分为几类,如果属于正在运行的应用程序,就会显示出来。默认情况下,它会过滤掉其他问题(如来自外部库的问题)。

选择一行可查看发生内存泄漏的位置和堆栈跟踪,显示造成泄漏的原因。

作为收集数据的替代方法,选择开放 可将 XML 格式的外部日志文件加载到Memcheck 视图中。

在某一行上移动鼠标,可查看有关函数的更多信息。

要在行间移动,请选择上一个按钮 (Previous) 或下一步按钮 (Next)。

有关使用 Memcheck更多信息,请参阅 Valgrind 文档中的解释 Memcheck 的输出

过滤内存问题

要过滤结果,请选择过滤器 ,然后选择要在视图中显示的问题类型:

  • 确定和可能的内存泄漏
  • 使用未初始化内存
  • 无效调用free()
  • 大小和对齐错误
  • 文件描述符问题

选择Other 可显示不属于任何类别的问题。

选择External errors 也可显示来自外部库的问题。

另请参阅 如何分析剖析函数执行在外部应用程序上运行 Valgrind 工具为项目指定 Valgrind 设置分析器Valgrind CallgrindValgrind Memcheck分析代码

Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.