Heob
使用 Heob 检测内存泄漏。
要指定 Heob 的设置,请转至Analyze >Heob 。

在“Extra arguments ”中,输入运行 Heob 的附加参数。要列出 Heob 控制台中可用的参数,请在此字段中输入-H ,然后按Enter 键。
例如,使用-oleaks.html 选项可将内存泄漏数据记录到 HTML 文件中。结合此选项,您可以使用-g2 选项在文件中以可视化方式对内存泄漏进行分组,并使用-L1024 选项将最多 1024 字节的内存泄漏内容记录到文件中。例如,-oleaks.html -g2 -L1024
若要将更改保存为默认设置,请选择“
”。
要删除自定义设置配置文件,请先选中该配置文件,然后选择“Delete ”。
以下各节将更详细地介绍可用的选项。
记录结果
检查结果将显示在“Memcheck ”视图中,并记录到文件中。请在“XML output file ”中指定文件名。Heob 会在项目目录中创建该文件。
您可以在文件名中使用进程标识符(PID)作为变量。例如,leaks-%p.xml 。这也会将 Heob 注入到子进程中。
您可以使用的其他变量包括:%P (父进程 PID)和%n (应用程序名称)。
如果使用变量,Qt Creator 无法自动打开该文件,但您可以从项目目录中手动打开它。
处理异常
Qt Creator 在Handle exceptions 中,选择Off 以使用标准异常处理程序,并在应用程序崩溃时让调试器自动附加。此功能仅在您通过选择“Preferences ” > “Debugger ” > “General ” > Use Qt Creator for post-mortem debugging。
选择“On ”可使用 Heob 异常处理程序,该程序会检查崩溃的原因和位置,并检测崩溃是否由缓冲区溢出引起。
选择“Only ”可禁用所有 Heob 功能(安装异常处理程序除外)。如果应用程序崩溃,仅会显示崩溃的堆栈跟踪。因此,此选项在控制台上使用 Heob 或将其用于子进程时最为有用。
错误时抛出异常
选中“Raise breakpoint exception on error ”复选框,可在应用程序运行时显示错误。
如果禁用此选项,诸如双重释放、释放无效指针和 内存不足等错误,只会将所有收集到的数据写入结果文件,您只能在应用程序运行结束时看到这些信息。
如果启用此选项,应用程序将在错误位置停止。这在与“Run with debugger ”选项配合使用时最为有用,该选项会在调试器下运行 Heob。
保护页面
在“Page protection ”中,选择“Off ”以使用标准内存分配函数,并仅启用内存泄漏检测。
选择“After ”可在每个已分配内存块的末尾放置一个受保护页面,若被访问则抛出异常。选择“Before ”可在每个已分配内存块之前放置一个受保护页面。这些选项会消耗内存并降低检查速度,因此仅建议用于 64 位或运行时间较短的程序。
选择“Freed memory protection ”可在释放时保护所有分配页面,确保其地址空间永不被重复使用。这对于检测“释放后使用”和“双重释放”非常有用。但对于 32 位程序,可用内存地址空间可能会很快耗尽。
处理内存泄漏数据
在“Leak details ”中,确定进程退出时如何处理收集到的内存泄漏数据。选择“None ”表示不收集任何内存泄漏数据。如果启用了内存泄漏类型检测,Heob 在进程退出时可能需要更多时间来收集数据。
选择“Simple ”可将所有未释放的内存写入结果文件。
Detect Leak Types (Show Reachable) 选择“Detect Leak Types ”可解析所有静态和全局内存块,以查找对内存泄漏的引用。可达的内存块会被标记为“可达”,并递归检查其是否存在其他引用。若发现引用,则将这些内存块标记为“间接可达”。剩余的内存块将检查彼此之间的引用关系,并被标记为“间接丢失”或“联合丢失”(如果这些内存块相互引用)。 完全没有引用的内存块将被标记为“丢失”。选择“ ”可将可达内存块也记录到结果文件中。
选择“Fuzzy Detect Leak Types ”可将引用了任何地址的内存块标记为“可访问 ”或“间接丢失”。当与某些自定义分配器(例如ffmpeg 中的av_malloc() )配合使用时,此选项非常有用,因为这些分配器仅在分配块内部某处保存一个地址,而不直接引用已分配块的起始地址。选择“Detect Leak Types (Show Reachable) ”可在结果文件中同时记录可访问的内存块。
在Minimum leak size 中,选择要检测的内存泄漏大小(单位:字节)。
在“Control leak recording ”中,选择“Off ”以记录所有内存泄漏。在运行过程中无法更改内存泄漏记录设置。
若要在不启动内存泄漏记录的情况下启动 Heob,请选择“On (Start Disabled) ”。在 Heob 控制台中,可将记录模式切换为“on ”或“off ”,使用“clear ”记录所有结果,或选择“show ”将当前所有内存泄漏记录到结果文件中。请在进程退出前打开该文件查看其内容。
若要在 Heob 启动时开始记录内存泄漏,同时仍保留控制记录的选项,请选择On (Start Enabled) 。
另请参阅 《使用 Heob 检测内存泄漏》、《操作指南:分析》、《分析器》以及《代码分析》。
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.