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

tMemMonitor是一款针对Windows平台专业、准确、易用的内存泄漏分析工具

【引言】

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

链接:wetest.qq.com

 

工具使用入口

 

【工具简介】

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平台专业、准确、易用的内存泄漏分析工具。

 

目前正使用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.点开文档后就能详细查看文件泄漏的具体报告

 

日志所在文件夹

 

报告内容

 

泄露情况报告

注意事项】

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

最新文章
1共探游戏产业新未来,AI与云发行成提效增值核心引擎 由徐汇区文化和旅游局指导,腾讯WeTest等联合主办的“解锁游戏提效增值新范式”专场分享会成功落幕。活动聚焦游戏产业最前沿的AI与云技术,吸引了近百位游戏、金融、泛互联网行业从业者参与。
2游戏性能测评数据“上新” 一图读懂逐点半导体与腾讯PerfDog联合打造的 “帧生成”指标 逐点半导体与腾讯PerfDog联合打造的 “帧生成”指标,一图带你读懂!
3「精准响应测试」解决方案发布,为游戏体验注入毫米级精度! 在QECon全球软件质量&效能大会上海站现场,腾讯IEG专项测试高级工程师徐鸿玥发表《游戏精准响应与动画一致性评测实践》主题演讲,首次系统性披露支撑《和平精英》亿级用户产品的精准响应测试方案。
4共探游戏产业新未来,AI与云发行成提效增值核心引擎 由徐汇区文化和旅游局指导,腾讯WeTest等联合主办的“解锁游戏提效增值新范式”专场分享会成功落幕。活动聚焦游戏产业最前沿的AI与云技术,吸引了近百位游戏、金融、泛互联网行业从业者参与。
5Al in CrashSight ——基于AI优化异常堆栈分类模型 CrashSight团队如何引入用LLM大模型驱动的问题分组方法,带来更智能化的问题分组体验。
购买
客服
反馈