MemProof(内存清道夫)是AutomatedQA出品的一款非常不错的检测内存泄漏和资源泄漏的免费调试工具,
适合于WIN32平台下使用DELPHI/C++BUILDER开发的应用程序。利用它可以方便的查找出一些忘记释放的指针以及资源。
它通过在调试模式下运行目标程序,监视程序的创建和释放操作,以达到检测资源泄漏的效果。
监测过程中它会根据资源类型计数,每次创建后增加计数,释放则递减计数,最后程序结束根据计数即可判断出资源的泄漏
使用方法
准备
MemProof要求目标程序带有完熬的调试信息。打开工程选项(Project-Options
1、Compiler面板
●去掉Optimization(代码优化)选项」
选择Stackframes(为所有过程函数强制生成调用琏栈)选项
选择Debuginformation(DCU文件中生成调试信息选项
●选择UseDebugDCUS(编译时链接带有调试信息的ⅤCLDCU文件)选项
Linker面板」
元、过程等地址信
选择cludeTD32debuginfo(将调试信息生成到可执行文件)选项
●开始
一切准备就绪,现在可以开始调试了
下面是用干调试的一段测武程序:
建一个空白工程,在Oncreate事件中加入以下代码:
cedureTFormlFormCreate(SenderTObject);
Closehandlel①);/天
再根据上面的介绍设置好工程选项。打升MemProof:d
的类型,包括Ero(错误)
指针)、Memy(内存)、GD
er(系统对象)、Kernel(核心对象)、Registry(注册表
Resourcescount-资源数目,Cuem代表当前数目,Pek代表峰值数目
Resourcessize-资源大小,Cure代表当前大小,Pea#代表峰值大小
选择File-Open打开要调试的执行文件,再选择Run-Run开始运行,再正常退出目标
程序,如果有资源泄漏Memproof侩会自动打开Resourcesdetails面板
Memproc供列出5个内存泄漏,我们可以看到每个内存泄漏都有详细的调用栈情况
以及相对应的源码位置
有时它会提示我们找不到对应的源码,这是应为没有指定源码搜索路径的原因
MemProof有两个位置可以设置源码搜索路径,一个在Configure-Searchdirectories
Projects-SearchDirectories前者是设置全局路径,后者是设置当前路径。一般建
在前者中设置DELPH的VCL以及共用库代码的路径,后者设置工程本身源码的路
径。MemProof还为用户提供了快捷搜索vCL源码路径的按钮Getdefaultfor,使用
个按钮可以快捷的获取DELPH的LibrayPath(有的用户安装了vC覆盖了默认调试工
选项,所以有可能得到的是vc的Libraypath,这种情
Path中去拷贝即可
另外MemProof还可以记录上次的测试结果方便用户做比较,以及过滤等功
如果需要测试动态连接库,可以选择Project-Parameters,在HostApplications中选
择主体程序,如果需要带命令行,则在Parameters中输入命令行,然后就可以开始测试
和DELPH中调试的方法是一样的
Memproo坏不支持Attachprocess的调试方式,这是一个不足的地方
内存检测