一种内存泄露的定位方法及装置制造方法及图纸

技术编号:3973137 阅读:218 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种内存泄露的定位方法,包括:记录被测程序运行前的初始内存值,以及所述被测程序运行退出后的剩余内存值;根据所述初始内存值和所述剩余内存值,计算所述被测程序运行过程中所消耗的消耗内存值;根据所述消耗内存值,判定所述被测程序是否存在内存泄露,当判定结果为是时,定位所述被测程序。相应的,本发明专利技术提供了一种内存泄露的定位装置,采用本发明专利技术,不仅能够实现由代码本身引起的内存泄露进行判定和定位,而且当内存泄露是由于非代码引起的或者其他一些非常规情况引起的情况下,仍然能够很好的完成内存泄露的检测与定位。

【技术实现步骤摘要】

本专利技术涉及软件检测领域,尤其涉及一种内存泄露的定位方法及装置
技术介绍
在计算机科学中,内存泄漏是指由于疏忽或错误造成程序未能释放已经不再使用 的内存的情况。内存泄漏会因为减少可用内存的数量从而降低计算机的性能,在最糟糕的 情况下,过多的可用内存被分配掉会导致全部或部分设备停止正常工作,或者应用程序崩 溃。VLD(Visual Leak Detector,Visual 检漏仪)是一款用于 Visual C++的免费内 存泄露检测工具,VLD通过对程序本身的内存申请函数进行监测,并判断所述内存申请函数 对应的内存是否有释放,来检测是否存在内存泄露,并定位到所在代码行。但是,由于VLD是基于对内存申请函数的监测来实现内存检漏与定位,所以当内 存泄露是由于非代码引起的或者其他一些非常规情况引起的情况下,VLD并不能够很好的 完成内存泄露的检测与定位。
技术实现思路
本专利技术所要解决的问题在于,提供一种内存泄露的检测方法及装置,根据被测程 序运行前后所消耗的内存值的记录、计算与判断,判定被测程序是否出现内存泄露,并在出 现内存泄露时,定位该被测程序。为了解决上述问题,本专利技术实施例提供了一种内存泄露的定位方法,包括记录被测程序运行前的初始内存值,以及所述被测程序运行退出后的剩余内存 值;根据所述初始内存值和所述剩余内存值,计算所述被测程序运行过程中所消耗的 消耗内存值;根据所述消耗内存值,判定所述被测程序是否存在内存泄露,当判定结果为是时, 定位所述被测程序。相应的,本专利技术实施例提供了一种内存泄露的定位装置,包括记录单元,用于记录被测程序运行前的初始内存值,以及所述被测程序运行退出 后的剩余内存值;计算单元,用于根据所述记录单元记录的初始内存值和所述剩余内存值,计算所 述被测程序运行过程中所消耗的消耗内存值;判定单元,用于根据所述计算单元计算得到的消耗内存值,判定所述被测程序是 否存在内存泄露;定位单元,用于当所述判定单元判定所述被测程序存在内存泄露时,定位所述被 测程序。本专利技术通过对程序运行过程中的内存的变化情况,来判定所述程序是否存在内存泄露,以在存在内存泄露时定位该程序,方便用户了解到存在内存泄露的位置。本专利技术实施 例是基于对内存变化情况的记录、计算以及判定来检测内存泄露并定位,并非基于所述程 序本身进行内存泄露的检测与定位,从而不仅能够实现由程序代码本身引起的内存泄露的 检测与定位,而且实现了当内存泄露是由于非程序代码引起的或者其他一些非常规情况引 起的情况下,仍然能够很好的完成内存泄露的检测与定位。附图说明图1是本专利技术实施例的内存泄露的定位装置的结构组成示意图;图2是本专利技术内存泄露的定位方法的第一实施例流程示意图;图3是本专利技术内存泄露的定位方法的第二实施例流程示意图。具体实施例方式下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于 本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本专利技术保护的范围。图1是本专利技术实施例的内存泄露的定位装置的结构组成示意图,如图1所示,该装 置包括记录单元1,用于记录被测程序运行前的初始内存值,以及所述被测程序运行退出 后的剩余内存值。在运行被测程序前,可根据需要对测试环境进行检测即对移动终端系统 进行检测,当确定测试环境无内存泄露时,即可运行所述被测程序,以检测所述被测程序是 否引起内存泄露。所述记录单元1在运行所述被测程序之前,记录终端的内存的初始内存 值,并当所述被测程序运行退出后,记录终端内存此时的剩余内存值。所述记录单元1可根 据需要,记录所述被测程序每一次运行前的初始内存值以及相应的每一次所述被测程序运 行退出后的剩余内存值。例如,当用户运行所述被测程序n次时,所述记录单元1相应的记 录第一次运行前的初始内存值dwBeginl,第一次运行退出后的剩余内存值dwEndl ;第二 次运行前的初始内存值dWBegin2,第二次运行退出后的剩余内存值dwEnd2,直到第n次的 初始内存值dwBeginn和剩余内存值dwEndn,此时,n值越大越好。计算单元2,用于根据所述记录单元1记录的初始内存值和所述剩余内存值,计 算所述被测程序运行过程中所消耗的消耗内存值。所述计算单元2可将所述记录单元1 记录的初始内存值以及剩余内存值进行减法运算,得到所述消耗内存值,例如当记录的 初始内存值为128M,剩余内存值为120M,则可以计算得到消耗内存值为8M。另外,当所 述记录单元1记录的相应内存值包括多个时,如当记录的相应的内存值包括dwBeginl、dwEndl, dwBegin2> dwEnd2> ......、 dwBeginn> dwEndn Ijf^if2 )(寸—flj禾呈次运行过程中的消耗内存值的计算方式为AdwMeml = dwBeginl-dwEndl, A dwMem2 =dwBegin2-dwEnd2, ......, A dwMemn = dwBeginn-dwEndn,同时,还可以根据所述 dwBeginl和dwEndn,计算得到总的消耗内存值A dwMemTotal = dwBeginl-dwEndn。判定单元3,用于根据所述计算单元2计算得到的消耗内存值,判定所述被测程序 是否存在内存泄露。其中,可当所述消耗内存值不为零时,判定所述被测程序存在内存泄4露,如上述的当所述计算单元2计算得到的消耗内存值为8M时,则说明所述被测程序运行 后有8M内存未被释放,存在内存泄露;若所述消耗的内存值为零时,则说明所述被测程序 运行后,内存均相应的释放,不存在内存泄露的问题。在实际情况中,由于误差的存在可能会影响所述判定单元3的判断,导致误判的 发生,可通过多次运行被测程序的方式进行相应的内存泄露的判定来避免误判的发生。运 行多次被测程序,所述记录单元1和所述计算单元2进行多次运行过程中相应的内存值的 记录与计算,得到相应的每一次运行消耗内存值和/或多次运行后总的消耗内存值(所述 每一次运行消耗内存值和/或多次运行后总的消耗内存值的获取如上述),分析所述每一 次运行消耗内存值和/或总的消耗内存值,若得到的多次运行后的每一次消耗内存值全部 或者大部分均 不为零时,或者多次运行后的总的消耗内存值不为零且随着运行次数的增加 而加大,或者每一次运行消耗内存值全部或者大部分均不为零且所述总的消耗内存值不为 零且随着运行次数的增加而不断加大,则所述判定单元3可判定存在内存泄露;否则,不存 在内存泄露。定位单元4,用于当所述判定单元3判定所述被测程序存在内存泄露时,定位所述 被测程序。一旦判定被测程序出现内存泄露,则定位该被测测序,以使用户了解到是那段程 序存在内存泄露。进一步的,如图1所示,该装置还包括显示单元4,用于显示程序运行时的内存使用信息,并发出多次运行所述程序的提 示。在所述被测程序运行过程中,可通过所述显示单元4实时显示程序运行时的内存使用 信息,如每一次被测程序运行前的初始内存值以及运行后的剩余内存值,以及消耗内存值 等,并显示需重复多次运行所述被测程序等提示以提示用户需对被测程序反复运行本文档来自技高网...

【技术保护点】
一种内存泄露的定位方法,其特征在于,包括:记录被测程序运行前的初始内存值,以及所述被测程序运行退出后的剩余内存值;根据所述初始内存值和所述剩余内存值,计算所述被测程序运行过程中所消耗的消耗内存值;根据所述消耗内存值,判定所述被测程序是否存在内存泄露,当判定结果为是时,定位所述被测程序。

【技术特征摘要】

【专利技术属性】
技术研发人员:刘伟
申请(专利权)人:东莞宇龙通信科技有限公司
类型:发明
国别省市:44[中国|广东]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1