MemProof(运行内存清道夫)是AutomatedQA荣誉出品的一款优秀的免费调试工具,专门用于检测内存泄漏和资源泄露。它适用于在WIN32平台上使用DELPHI/C BUILDER开发的应用软件。MemProof可以帮助用户轻松找出未释放的指针和资源。
MemProof通过在调试模式下运行目标程序,监控程序中对象的创建和释放操作,从而实现资源泄露检测。在检测过程中,它会根据资源类型进行计数,每当创建一个资源时计数增加,释放一个资源时计数减少。程序结束时根据计数结果就可以判断出资源泄露的方式。
为了使用MemProof,目标程序需要包含完整的调试信息。在项目选项中,需要取消勾选“Optimization”(代码优化)选项,选择“Stack frames”(为所有过程函数强制形成调用栈)选项,并选择“Debug information”(在DCU文件中生成调试信息)选项。在编译器控制面板中,选择“Use Debug DCU”(编译时链接包含调试信息的VCL DCU文件)选项。在链接器控制面板中,选择“Include TD32 debug info”(将调试信息生成到可执行程序)选项。
一切准备就绪后,现在可以开始调试了。下面是一个用于调试的简单示例程序:
procedure TForm1.FormCreate(Sender: TObject);
begin
CloseHandle(1);
end;
根据上述介绍设置好项目选项后,打开MemProof,选择“File-Open”打开要调试的可执行文件,然后选择“Run-Run”运行。正常退出目标程序后,如果有资源泄露,MemProof会自动打开“Resources details”面板。MemProof可以列出五个内存泄漏,每个内存泄漏都有详细的调用栈情况和相应的源代码位置。有时候它会提示找不到匹配的源代码,这是因为没有指定源代码搜索路径。
MemProof有两个地方可以设置源代码搜索路径,一个在“Configure-Search directories”,另一个在“Projects-Search Directories”。前者是设置全局路径,后者是设置当前路径。通常在全局路径中设置DELPHI的VCL和常用库代码的路径,在当前路径中设置项目自身的源代码路径。MemProof还提供了一个便捷的按钮“Get default for”,使用这个按钮可以方便地获取DELPHI的Library Path。由于一些客户安装了vC可能覆盖了默认调试工具选项,所以可能获取到的是vC的Library path,这种情况下可以直接从Path中复制。
另外MemProof还可以记录之前的检测结果,方便用户进行对比,以及过滤等功能。如果需要检测动态链接库,可以选中“Project-Parameters”,在“Host Applications”中选择主体程序,如果需要带cmd,则在“Parameters”中输入cmd,然后就可以开始检测了。MemProof的调试方式与DELPHI中的调试方式相同,但它不兼容“Attach process”的调试方法,这是一个不足之处。