×

腾讯内部内存泄漏分析工具简析

消耗积分:1 | 格式:rar | 大小:0.4 MB | 2017-10-11

分享资料个

 今天给大家介绍一款腾讯自主研发,荣获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.点开文档后就能详细查看文件泄漏的具体报告

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !