本页内容

使用 Memcheck 检测内存泄漏

借助Valgrind 工具套件中的 Memcheck 工具,您可以检测应用程序中与内存管理相关的问题。请将该工具与 GDB 调试器配合使用。当检测到问题时,应用程序会暂停,您可以对其进行调试。

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

下载并安装 Valgrind 工具后,您可以从Qt Creator 获取 Memcheck。

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

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

    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.