基于钩子函数的c++内存泄露检测方法

基于钩子函数的c++内存泄露检测方法

ID:24351282

大小:50.50 KB

页数:3页

时间:2018-11-13

基于钩子函数的c++内存泄露检测方法_第1页
基于钩子函数的c++内存泄露检测方法_第2页
基于钩子函数的c++内存泄露检测方法_第3页
资源描述:

《基于钩子函数的c++内存泄露检测方法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、基于钩子函数的C++内存泄露检测方法本文提出了一种基于钩子函数的C++内存泄露检测方法。方法在分析内存泄露和钩子函数的基础上,通过在内存分配时使用钩子函数记录当时现场。在程序结束时,方法检测和定位内存泄露,并给出其详细信息。关键词:内存泄露;钩子函数;C++1引言  内存泄露是指由动态分配的内存在使用结束后,由于某种原因没有被及时释放,使得这些动态内存不能再被程序使用,导致可用内存数量减少,甚至耗尽。内存泄漏导致系统性能下降甚至引起程序运行失败、系统宕机。  一些高级语言如JAVA通过垃圾回收的方式自动回收不再使用的内存,但是这种机制并不能完全

2、保证消除内存泄露,还可能会带来性能的损失。但是在C++中内存分配和释放完全由程序员操作,因此在逻辑庞大的程序中很难避免内存泄露。  常见的静态内存泄露检测方法通过检查程序语义来实现。这类方法认为,正确的程序代码,应该符合预定的规则,例如,通过malloc函数申请的内存,在接下来运行的所有代码分支都应该有一个free函数。可将代码的路径抽象为布尔限制路径,对动态内存的指针加以跟踪。静态检测方法的缺陷是对于大型的工程检测比较耗时;而且这类方法直接对代码进行分析,实现复杂,目前还有一些难点尚未解决,例如循环的处理。  为此本文给出了一种动态的内存泄露

3、检测方法,在每次内存分配时使用钩子函数记录下当时的现场,当程序退出时,对于检测到的内存泄漏,查找其记录下来的现场信息,并将其转换成报告输出。该方法能够定位内存泄露发生的位置,并且给出内存泄露的详细信息。2钩子函数  钩子(Hook)是E64,反复调用该函数,便可以得到内存分配点的调用堆栈了。关键代码如下:  //oduleBase64,NULL)){  //Couldn'ttracebackthroughanymoreframes.  break;  }  if(frame.AddrFrame.Offset==0){  //Endofstack

4、.  break;  }  //Pushthisframe'sprogramcounterontotheprovidedCallStack.  callstack->push_back((DemBlockHeader结构,在此结构中就可以获得这个链表。代码如下:  char*pheap=neBlockHeader*pheader=pHdr(pheap)->pBlockHeaderNext;  deletepheap;  //其中pheader则为链表首指针。(4)生成报告  最后,使用SymGetLineFromAddr64()及SymFrom

5、Addr()函数将钩子函数得到的信息转化为可读的报告。4结束语  内存泄露具有微细性、积累性的特点,影响程序的执行速度。本文针对内存泄露的实际情况,提出了一种基于钩子函数的动态监测方法。为了验证方法的有效性,将方法用C++语言在onitorBasedOnHOOKTechnique[J].[2]BartoszMile].北京:人们邮电出版社.2007.[3]邵叶秦.有效的C++内存泄露检测方法[J].[4]汪小林,王振林等.利用虚拟化平台进行内存泄露探测[J].计算机学报.2010.3.

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。