【腾讯内部工具分享】内存泄漏分析工具tMemoryMonitor

原文地址:https://wetest.qq.com/lab/view/40.html

【引言】

今天给大家介绍一款腾讯自主研发,荣获2015年十佳组件第一名的“tMemoryMonitor”内存泄漏分析工具。该腾讯内部工具已经在腾讯WeTest官网内开放给用户使用,助您在工作中扫除内存泄露问题,让工作精益求精。

链接:wetest.qq.com

【腾讯内部工具分享】内存泄漏分析工具tMemoryMonitor_第1张图片

工具使用入口

 

【工具简介】

tMemoryMonitor简称TMM,是一款运行时C/C++内存泄漏检测工具。TMM认为在进程退出时,内存中没有被释放且没有指针指向的无主内存块即为内存泄漏,并进而引入垃圾回收机制,在进程退出时检测出堆内存中所有没有被引用的内存单元,因而内存泄漏检测准确率为100%TMM下载地址:http://wetest.qq.com/cloud/index.php/index/TMM

【开发目的】

防泄漏测试一直是编程测试中非常重要的一个模块,尽管目前市面上已有一些Windows平台下的内存泄漏动态检测工具,比如UMDH,VLD,Purify,BoundsCheck等,但其中Purify和BoundsCheck是昂贵的商用软件,UMDH需要人工获取内存快照,操作门槛较高,VLD则需要修改源程序的代码,同时这几款工具都存在误报情况,因此准确性不高。而我们的tMemMonitor就是一款针对Windows平台专业、准确、易用的内存泄漏分析工具。

【腾讯内部工具分享】内存泄漏分析工具tMemoryMonitor_第2张图片

                                             目前正使用TMM的腾讯团队

 

【算法原理】

Windows 中有多种级别的内存分配函数,其中,最底层的是ntdll.dll 提供的Rtl 系列函数,在这之上的有Windows API 提供的heap 管理函数,再上层,C/C++库提供了malloc/free 函数和new/delete 操作符,因此替换如此层级复杂的函数比较困难,同时如果替换现有的堆分配函数,则无法做到和原有函数的执行效果完全一致,所以替换原生的堆分配函数对于Windows 系统来说几乎是不可行的,那么只能wrap(包裹)这些堆分配函数。

Linux 下的内存检测工具,比如Valgrind 就采用了包裹堆分配函数的方法,但它包裹的方法是不透明的,在调用栈中会多出额外一帧。TMM 则采用全透明的包裹函数,将挂钩函数分为前后二部分(如图1 所示)。在函数调用前执行

per-hook 函数,在函数返回前调用执行post-hook 函数。有了前后挂钩函数,TMM就可以在堆分配/释放函数执行前获得参数,并修改分配大小之类的参数;在函数执行后,记录分配的大小和地址、调用栈之类的信息。

 

【案例介绍】

下面我们通过测试市面上一款我们常用的音乐软件,来看看这款软件能给我们带来怎样的收益。

在拥有Administrator权限的情况下启动TMM,然后在列表区添加XX音乐这款软件,就已经成功在TMM中加载了这款程序。

1.我们在XX音乐中随意选择一首歌进行播放

2.播放结束后正常退出XX音乐,这时TMM就会弹出一个名为“data”文件夹,里面包括着在播放音乐期间的数据泄漏详情

3.点开文档后就能详细查看文件泄漏的具体报告

 

【腾讯内部工具分享】内存泄漏分析工具tMemoryMonitor_第3张图片

日志所在文件夹

【腾讯内部工具分享】内存泄漏分析工具tMemoryMonitor_第4张图片

报告内容

【腾讯内部工具分享】内存泄漏分析工具tMemoryMonitor_第5张图片

泄露情况报告

注意事项】

1.安装TMM时,用户应有Administrator权限,并且TMM不支持中文安装途径。

2.使用TMM时需要修改注册表,如遇安全软件弹窗警告,可将TMM加入信任列表放心使用

3.被检测程序不能是加壳版本,因为加壳程序的函数名和函数地址已经混淆

4.被检测程序需是release版本

5.如需在分析报告中显示泄漏点详细堆栈信息,请在被检测程序同级目录放置同版本的PDB文件,PDB解析时目录不支持中文

6.使用TMM导致被测程序退出时变慢属于正常情况,此时TMM正在统计内存泄漏情况,请不要手动强制结束进程。

 

总结

TMM 适用于PC 端所有C/C++程序的内存泄漏分析。对于被测程序,不需要修改源代码,运行一次被测程序就能够准确定位泄漏的文件名和行号。TMM 是一款专业、准确、易用的内存泄漏检测工具,值得每个程序员拥有。

 

TMM下载地址:http://wetest.qq.com/cloud/index.php/index/TMM

你可能感兴趣的:(Windows相关,windbg与异常分析)