Heob

要指定 Heob 的设置,请访问Analyze >Heob

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 无法自动打开文件,但可以从项目目录打开。

处理异常

Handle exceptions 中,选择Off 可使用标准异常处理程序,并在应用程序崩溃时自动附加调试器。只有在选择首选项>Debugger >General > 注册Qt Creator 为死后调试器时,该功能才会起作用。 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 可解析所有静态和全局内存块,以查找对泄漏的引用。可访问的块被标记为可访问,并递归检查是否有其他引用。如果发现引用,则标记为间接可达。其余的块会被检查是否存在相互引用,并标记为间接丢失共同丢失(如果块之间相互引用)。没有任何引用的区块将被标记为丢失。选择Detect Leak Types (Show Reachable) ,也会在结果文件中记录可到达的块。

选择Fuzzy Detect Leak Types ,如果内存块有对任何地址的引用,则标记为可到达间接丢失。该选项在与某些自定义分配器(如ffmpeg 中的av_malloc() )一起使用时非常有用,这些分配器只保留分配块内的某个地址,而不直接引用已分配块的起始地址。选择Detect Leak Types (Show Reachable) ,也可在结果文件中记录可达块。

Minimum leak size 中,选择要检测的泄漏大小(以字节为单位)。

Control leak recording 中,选择Off 记录所有泄漏。泄漏记录正在运行时不能更改。

要在不启动泄漏记录的情况下启动 Heob,请选择On (Start Disabled) 。在 Heob 控制台中,打开记录onoffclear 所有结果,或选择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.