<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[内存泄漏分析工具tMemoryMonitor]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Mon, 28 Mar 2016 11:12:52 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<br/>【腾讯内部工具分享】内存泄漏分析工具tMemoryMonitor<br/><br/>【引言】<br/><br/>今天给大家介绍一款腾讯自主研发，荣获2015年十佳组件的“tMemoryMonitor”内存泄漏分析工具。该腾讯内部工具已经在腾讯WeTest官网内开放给用户使用，助您在工作中扫除内存泄露问题，让工作精益求精。<br/><br/>显示大图<br/><br/><br/>工具使用入口<br/><br/>【工具简介】<br/><br/>tMemoryMonitor简称TMM，是一款运行时C/C++内存泄漏检测工具。TMM认为在进程退出时，内存中没有被释放且没有指针指向的无助内存块即为内存泄漏，并进而引入垃圾回收机制，在进程退出时检测出堆内存中所有没有被引用的内存单元，因而内存泄漏检测准确率为100%。TMM下载地址：http://wetest.qq.com/cloud/index.php/index/TMM<br/><br/>【开发目的】<br/><br/>防泄漏测试一直是编程测试中非常重要的一个模块，尽管目前市面上已有一些Windows平台下的内存泄漏动态检测工具，比如UMDH，VLD，Purify，BoundsCheck等，但其中Purify和BoundsCheck是昂贵的商用软件，UMDH需要人工获取内存快照，操作门槛较高，VLD则需要修改源程序的代码，同时这几款工具都存在误报情况，因此准确性不高。而我们的tMemMonitor就是一款针对Windows平台专业、准确、易用的内存泄漏分析工具。<br/><br/><br/><br/>目前正使用TMM的腾讯团队<br/><br/>【算法原理】<br/><br/>Windows 中有多种级别的内存分配函数，其中，最底层的是ntdll.dll 提供的Rtl 系列函数，在这之上的有Windows API 提供的heap 管理函数，再上层，C/C++库提供了malloc/free 函数和new/delete 操作符，因此替换如此层级复杂的函数比较困难，同时如果替换现有的堆分配函数，则无法做到和原有函数的执行效果完全一致，所以替换原生的堆分配函数对于Windows 系统来说几乎是不可行的，那么只能wrap（包裹）这些堆分配函数。<br/><br/>Linux 下的内存检测工具，比如Valgrind 就采用了包裹堆分配函数的方法，但它包裹的方法是不透明的，在调用栈中会多出额外一帧。TMM 则采用全透明的包裹函数，将挂钩函数分为前后二部分（如图1 所示）。在函数调用前执行<br/><br/>per-hook 函数，在函数返回前调用执行post-hook 函数。有了前后挂钩函数，TMM就可以在堆分配/释放函数执行前获得参数，并修改分配大小之类的参数；在函数执行后，记录分配的大小和地址、调用栈之类的信息。<br/><br/>【案例介绍】<br/><br/>下面我们通过测试市面上一款我们常用的音乐软件，来看看这款软件能给我们带来怎样的收益。<br/><br/>在拥有Administrator权限的情况下启动TMM，然后在列表区添加XX音乐这款软件，就已经成功在TMM中加载了这款程序。<br/><br/>1.我们在XX音乐中随意选择一首歌进行播放<br/><br/>2.播放结束后正常退出XX音乐，这时TMM就会弹出一个名为“data”文件夹，里面包括着在播放音乐期间的数据泄漏详情<br/><br/>3.点开文档后就能详细查看文件泄漏的具体报告<br/><br/><br/>日志所在文件夹<br/><br/><br/>报告内容<br/><br/><br/>泄露情况报告<br/><br/>【注意事项】<br/><br/>1.安装TMM时，用户应有Administrator权限，并且TMM不支持中文安装途径。<br/><br/>2.使用TMM时需要修改注册表，如遇安全软件弹窗警告，可将TMM加入信任列表放心使用<br/><br/>3.被检测程序不能是加壳版本，因为加壳程序的函数名和函数地址已经混淆<br/><br/>4.被检测程序需是release版本<br/><br/>5.如需在分析报告中显示泄漏点详细堆栈信息，请在被检测程序同级目录放置同版本的PDB文件，PDB解析时目录不支持中文<br/><br/>6.使用TMM导致被测程序退出时变慢属于正常情况，此时TMM正在统计内存泄漏情况，请不要手动强制结束进程。<br/><br/>【总结】 TMM 适用于PC 端所有C/C++程序的内存泄漏分析。对于被测程序，不需要修改源代码，运行一次被测程序就能够准确定位泄漏的文件名和行号。TMM 是一款专业、准确、易用的内存泄漏检测工具，值得每个程序员拥有。
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 内存泄漏分析工具tMemoryMonitor]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>