一种内存泄漏检测方法及装置的制作方法

文档序号:6369678阅读:163来源:国知局
专利名称:一种内存泄漏检测方法及装置的制作方法
技术领域
本发明涉及通信设备测试领域,尤其涉及ー种内存泄漏的检测方法及装置。
背景技术
当程序运行时,程序中的内存动态空间申请语句会向系统申请用于存储数据的空间,此时,系统从内存的heap空间中开辟一个动态空间并分配给该申请程序;当程序运行结束后,系统释放为该程序开辟的动态空间,以便其他程序运行时继续使用heap空间;此时,可能存在由于程序设计的失误,导致系统未及时释放临时开辟的动态空间的情况,这种情况即为内存泄漏。内存泄漏会使系统heap空间越来越小,系统运行速度降低。当内存泄漏达到一定程度时,可使系统运行非常缓慢,直至系统无法分配出动态空间,即heap空间耗尽,最終导 致整个系统瘫痪。内存泄漏是软件运行过程中经常遇到的问题,同时又是难以解决的问题,这是因为在系统刚开始出现内存泄漏时,一般没有明显的表现;当内存泄漏严重,系统中heap空间被耗尽而导致系统崩溃时,再查找内存泄漏在代码中的位置就比较困难。现有技术下,对于解决内存泄漏的查找和定位问题,通常采用在整个系统中引入内存泄漏检测程序,统计内存动态分配和释放的信息记录在日志文件中,并根据上述信息得出未释放内存的次数和大小,最终输出日志文件至終端,方便测试人员进行调试。该发明存在的问题是,由于输出至日志文件的统计信息为无序排列,测试人员需要进行大量繁琐的工作分析上述统计信息,从而判断是否存在内存信息,浪费了大量人力,执行效率低,并不能完全排除内存泄漏问题,复杂的内存泄漏检测程序消耗系统资源,也会使系统负担加重。综上所述,内存泄漏不利于系统顺畅的运行,而现有技术下的解决方案,存在内存泄漏检测程序占用系统空间,误差率大,内存泄漏故障排除不充分,对系统测试人员要求较高,不便于实现等问题。

发明内容
本发明实施例提供ー种内存泄漏检测方法及装置,用以解决现有技术中存在的系统内存泄漏检测过程中,存在的内存泄漏检测程序占用系统空间大,误差率大,需要浪费大量人力进行内存泄漏判定等问题。本发明实施例提供的具体技术方案如下ー种内存泄漏检测方法,所述方法包括系统每启动ー个应用程序,针对该应用程序建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统计所述任意一应用程序对应的内存动态申请信息;根据获得的各统计结果分析所述内存动态申请信息的变化情况,确定所述内存动态申请信息发生规律性变化时,判定所述任意一应用程序存在内存泄漏。ー种内存泄漏检测装置,该装置包括申请信息建立模块,系统每启动ー个应用程序,针对该应用程序建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统计所述任意ー应用程序对应的内存动态申请信息;判定模块,用于根据获得的各统计结果分析所述内存动态申请信息的变化情況,确定所述内存动态申请信息发生规律性变化时,判定上述任意ー应用程序存在内存泄漏。本发明实施例中,系统每启动ー个应用程序,针对该应用程序建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统计任意一应用程序对应的内存动态申请信息;根据获得的各统计结果分析上述内存动态申请信息的变化情况,确定该内存动态申请信息发生规律性变化吋,判定对应任意一应用程序存在内存泄漏。结合对内存动态信息中关键数据的统计,能够方便地判断是否存在内存泄漏,准确定位内 存泄漏在代码中的位置,方便系统测试人员针对内存泄漏问题对系统进行调试。


图I为本发明实施例中内存泄漏检测装置结构图;图2为本发明实施例中内存泄漏检测的具体实施流程;图3为本发明实施例中内存信息统计过程示意图。
具体实施例方式本发明实施例中,系统每启动ー个应用程序,针对该应用程序建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统计任意一应用程序对应的内存动态申请信息;根据获得的各统计结果分析上述内存动态申请信息的变化情况,确定该内存动态申请信息发生规律性变化吋,判定对应任意一应用程序存在内存泄漏。结合对内存申请信息中关键数据的统计,能够方便地判断是否存在内存泄漏,准确定位内存泄漏在代码中的位置,方便系统测试人员针对内存泄漏问题对系统进行调试。下面结合附图对本发明优选的实施方式进行详细说明。參阅图I所示,本发明实施例中的ー种内存泄漏检测装置包括申请信息建立模块11和判定模块12,其中,申请信息建立模块11,用于当系统每启动ー个应用程序,针对该应用程序建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统计上述任意一应用程序对应的内存动态申请信息;判定模块12,用于根据获得的各统计结果分析上述内存动态申请信息的变化情况,确定该内存动态申请信息发生规律性变化时,判定上述任意一应用程序存在内存泄漏。内存泄漏检测装置可以嵌入到待检测通信设备的操作系统当中,也可以制作成一个即插即拔装置,接入待检测通信设备,即可检测该通信设备系统是否存在系统泄漏问题。基于上述内存泄漏检测装置,參阅图2所示,下面以任意一应用程序记为程序A为例详细介绍本发明实施例提供的具体技术方案步骤200 :系统每启动ー个应用程序,针对该应用程序建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统计上述任意ー应用程序对应的内存动态申请信息。具体为在系统内存动态申请的统一接ロ处添加内存动态申请信息统计程序,系统每启动ー个程序,则该程序建立相应的内存动态申请信息。在任意一个应用程序(以下简称程序A)执行过程中,按照预设方式多次统计上述程序A对应的内存动态申请信息,如,在启动程序A后,针对程序A按照预设时长周期性统计或者按照预设次数多次统计程序A对应的内存动态申请信息,在上述统计内存动态申请信息的过程中,可以根据用户指示,随时进行暂停处理。上述程序A可以为ー个应用程序,如“游戏”应用程序,也可以为一段公共代码。例如,可以在系统内存动态申请统ー接ロ处定义了一个统计内存动态申请信息的函数,该函数包含程序A的所在文件名、行号、未释放的动态申请总次数和未释放的动态内存总大小等參数;然后,定义某一内存空间来存储上述内存动态申请信息;判断该是否存 在内存动态空间申请,如果存在,则统计内存动态申请信息,并将内存动态申请信息实时反馈到用户操作界面。上述动态申请相关的统计信息,内存动态申请信息可以包括以下几种动态申请语句所在的模块名称(可以为空);动态申请语句所在的文件名称;动态申请语句所在的行号;动态申请所分配的起始地址;动态申请的内存大小;未释放的动态申请总次数;未释放的动态内存总大小。其中,动态申请语句所在的文件名称,动态申请语句所在的行号,以及未释放的动态内存总大小或/和未释放的动态申请总次数为必须统计项;用户操作界面中显示上述内存动态申请信息所有项为优选方案。动态申请语句所在的行号可以为一行行号也可以为多行行号,即触发程序A某种功能时,该功能对应的申请内存动态空间的代码对应的行号。上述统计内存动态申请信息过程可以采用实时统计的形式,即只要系统中存在程序或者代码运行,即统计该运行的程序A内存动态申请信息;也可以采用触发形式启动内存动态申请信息的统计,即根据用户指示,如在操作界面输入暗码或者在操作界面选择内存动态申请信息统计图标,启动内存动态申请信息统计程序。显然,上述第二种方式更加节省系统开销。步骤210 :根据获得的各统计结果分析上述内存动态申请信息的变化情况,确定该内存动态申请信息发生规律性变化时,判定对应任意一程序A存在内存泄漏。重复上述统计内存动态申请信息过程,可以将上述统计的多次内存动态申请信息进行实时显示并存储,再对存储的多组数据进行分析,方便用户随时查看内存动态信息统计结果;也可以将上述统计的多次内存动态申请信息不进行显示和存储,而直接进行分析。參阅图3所示,具体为选定通信设备系统的某一状态为初始状态,统计此时的内存动态申请信息,将该内存动态申请信息显示在用户操作界面并将该内存动态申请信息存储到指定区域;或者对此时的内存动态申请信息不进行显示,并将其暂时放入缓存中。根据用户指示,运行程序A后回到初始界面,统计程序A运行后的内存动态申请信息。若采用显示程序A运行后在用户操作界面显示内存动态申请信息的方式,此时,通过系统中的刷屏函数可以将上述内存动态申请信息实时显示在用户操作界面上并存储在上述指定区域处。根据用户的指示,按照某种预设方式重复上述操作过程,在该操作过程中,用户可以根据需要,随时暂停该操作过程,系统会实时显示并存储内存动态申请信息。由于在程序编写过程中的特殊需要,有的程序在运行过程中申请的某些内存动态空间后需要常驻内存动态空间,或者在一段时间内常驻内存的情况,因此上述统计内存动态申请信息的过程通常应大于两次,以保证内存动态申请信息的可靠性,从而更加准确地判定系统是否存在内存泄漏的问题。上述内存动态申请信息显示方式可以是显示内存动态空间中未释放的所有程序列表,单击该程序列表中某一程序显示上述内存动态申请信息显示项;也可以是以多条详细信息列表形式显示,每
条详细信息显示内存动态空间中未被释放内存空间的语句所在文件名称、占用内存大小、未被释放的次数等一系列信息。根据获得的多次统计结果,确定多次统计的内存动态申请信息包含的未释放的动态内存总大小在预设范围内变化时,即程序A后一次内存动态申请信息与程序A前一次内存动态申请信息相比较,后一次动态申请中未释放的动态申请占用内存空间大小和次数总是大于前一次动态申请未释放的动态申请占用内存空间大小和次数,且上述每两次内存动态申请信息的差值在预设范围内变化时,说明程序A中的代码编写出现问题,存在内存泄漏的问题,将上述比对结果显示在用户操作界面上,显示项可以为内存泄漏判定结果、动态申请语句所在文件名、动态申请语句所在的行号,动态申请的内存大小、未释放的动态申请总次数等;若上述多次内存动态申请信息统计结果均在预设范围内变化时,或者仅前两次存在较大差值,此后统计的内存动态申请信息均在预设范围内变化时,说明系统不存在内存泄漏问题,将上述对比结果显示在用户操作界面上,此时显示项可以为内存泄漏判定结果。通常,上述内存动态申请信息统计次数为不低于两次。上述根据多次统计的未释放的动态内存总大小及未释放的动态申请总次数在预设范围内变化吋,则判定存在内存泄漏,是指程序A每一次未释放的动态内存总大小按照时间顺序组成的数列或/和未释放的动态申请总次数按照时间顺序组成的数列存在预设范围内的等差变化时,则说明程序A存在内存泄漏。例如,设定历次未释放的动态内存总大小组成的数列,历次差值变化范围为5KB,未释放的动态申请总次数为I ;选定待机界面为初始界面,统计此时未释放的动态内存总大小为0,未释放的动态申请总次数为O ;运行程序A,然后返回初始界面,统计此时未释放的内存总大小为50KB,未释放的动态申请总次数为I ;再次运行程序A,返回初始界面,统计此时未释放的内存总大小为98KB,未释放的动态申请总次数为2 ;再次运行程序A,返回初始界面,统计此时未释放的内存总大小为150KB,未释放的动态申请总次数为3 ;再次运行程序A,返回初始界面,统计此时未释放的内存总大小为199KB,未释放的动态申请总次数为4。系统统计上述三次运行程序A后,内存动态申请信息中未释放的总大小差值依次为50KB、48KB、52KB、49KB,则上述程序A的多次统计未释放内存动态总大小组成的数列存在历次差值的变化范围均小于5KB的等差变化;内存动态申请信息中为释放的申请总次数也为等差数列。次数判定程序A存在内存泄漏,需要对该程序进行调试。测试人员可以综合考虑各种情况,设定上述动态申请信息的变化范围。
程序A的内存动态申请信息可以以悬浮窗ロ的形式显示在用户操作界面,在上述多次动态申请信息的统计过程的每个操作步骤中均显示该悬浮窗ロ,方便用户实时观察内存动态申请信息。例如,对手机进行内存泄漏检测时,选择手机的待机界面为初始状态,可以实时统计此时的内存动态申请信息,也可以由用户触发内存动态申请信息统计程序后,统计待机界面的内存动态申请信息,将该统计信息显示在手机屏幕上,并存储到用户指定的区域,根据用户的指示,运行“短消息”程序并进行写短信并发送短信操作,此吋,“短信”程序中的内存动态空间申请代码会为该操作申请内存动态空间,当短信编写完毕并发送后返回待机界面,统计此时的内存动态申请信息,将统计信息实时显示在手机屏幕上,并存储到用户指定的区域,手机屏幕显示项为
第一次 无;第二次存储卡-短信文件-第60行-占用内存动态空间IM-未释放动态申请I次。根据用户指示,重复上述过程两次,系统按时间先后次序共显示并存储内存动态申请信息4条,假如采用多条详细信息列表显示方式,手机屏幕显示项为第一次无;第二次存储卡-短信文件-第60行-占用内存动态空间IM-未释放动态申请I次;第三次存储卡-短信文件-第60行-占用内存动态空间2M-未释放动态申请2次;第四次存储卡-短信文件-第60行-占用内存动态空间3M-未释放动态申请3次。对比4次内存动态申请信息,在手机屏幕上显示最终内存泄漏检测结果存在内存泄漏!短信文件-第60行-占用内存动态空间3M-未释放动态申请3次。因此,可以判定该手机存在内存泄漏问题,其原因可能是,在“短信”程序中缺少写信息并发送信息操作申请内存动态空间释放的代码。程序测试人员可以较为快捷地查找到动态泄漏的位置,并进行代码修改。当程序A运行吋,系统为该程序A分配存储数据的动态内存,并在程序A运行吋,统计该程序内存动态申请信息,在系统内存释放的统ー接ロ处添加内存释放信息记录清除程序,当程序A动态申请的内存被释放时,清除在内存动态申请信息统计程序统计的程序A的内存动态申请信息。通过对内存泄漏的准确判断和定位,系统测试人员可以较为快捷地查找存在内存泄漏问题的代码位置,从而修改代码,完善系统中的应用程序。综上所述,本发明实施例中,系统每启动ー个应用程序,针对该应用程序建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统计所述任意一应用程序对应的内存动态申请信息;根据获得的各统计结果分析上述内存动态申请信息的变化情況,确定该内存动态申请信息发生规律性变化吋,判定该任意一应用程序存在内存泄漏。这样,能够方便地判断是否存在内存泄漏,准确定位内存泄漏在代码中的位置,方便系统测试人员针对内存泄漏问题对系统进行调试。该方法占用系统内存空间小,对内存泄漏判断和定位准确,可广泛应用于手机、MP3、MP4、GPS等各种通信设备,方便系统测试人员针对内存泄漏问题对系统进行调试。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精 神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种内存泄漏检测方法,其特征在于,所述方法包括 系统每启动一个应用程序,针对该应用程序建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统计所述任意一应用程序对应的内存动态申请 目息; 根据获得的各统计结果分析所述内存动态申请信息的变化情况,确定所述内存动态申请信息发生规律性变化时,判定所述任意一应用程序存在内存泄漏。
2.如权利要求I所述的方法,其特征在于,所述按照预设方式多次统计所述任意一应用程序对应的内存动态申请信息,包括 按照预设时长周期性统计所述任意一应用程序对应的内存动态申请信息;或者 按照预设次数统计所述任意一应用程序对应的内存动态申请信息。
3.如权利要求I所述的方法,其特征在于,所述内存动态申请信息至少包括动态申请语句所在的文件名称和行号,以及未释放的动态内存总大小或/和未释放的动态申请总次数。
4.如权利要求I至3任一项所述的方法,其特征在于,确定所述内存动态申请信息发生规律性变化时,判定所述任意一应用程序存在内存泄漏,包括 根据获得的各统计结果,确定多次统计的内存泄漏申请信息包含的未释放的动态内存总大小或未释放的动态申请总次数在预设范围内变化时,判定所述任意一应用程序存在内存泄漏,并通过动态申请语句所在文件名称和行号定位内存泄漏的位置。
5.如权利要求I所述的方法,其特征在于,所述统计内存动态申请信息,包括 采用实时统计的方式统计内存动态申请信息;或者 采用触发方式统计内存动态申请信息。
6.一种内存泄漏检测装置,其特征在于,该装置包括 申请信息建立模块,用于当系统每启动一个应用程序,针对该应用程序建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统计所述任意一应用程序对应的内存动态申请信息; 判定模块,用于根据获得的各统计结果分析所述内存动态申请信息的变化情况,确定所述内存动态申请信息发生规律性变化时,判定所述任意一应用程序存在内存泄漏。
7.如权利要求6所述的装置,其特征在于,所述申请信息建立模块,具体用于按照预设时长周期性统计所述任意一应用程序对应的内存动态申请信息;或者按照预设次数统计所述任意一应用程序对应的内存动态申请信息。
8.如权利要求6所述的装置,其特征在于,所述申请信息建立模块统计的内存动态申请信息至少包括动态申请语句所在的文件名称和行号,以及未释放的动态内存总大小或/和未释放的动态申请总次数。
9.如权利要求6至8任一项所述的装置,其特征在于,所述判定模块,具体用于根据获得的各统计结果,确定多次统计的内存泄漏申请信息包含的未释放的动态内存总大小或未释放的动态申请总次数在预设范围内变化时,判定所述任意一应用程序存在内存泄漏,并通过动态申请语句所在文件名称和行号定位内存泄漏的位置。
10.如权利要求6所述的装置,其特征在于,所述申请信息建立模块,具体用于采用实时统计的方式统计内存动态申请信息;或者采用触发方式统计内存动态申请信息。
全文摘要
本发明公开了一种内存泄漏检测方法及装置,该方法包括系统每启动一个应用程序,针对该应用程序建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统计任意一应用程序对应的内存动态申请信息;根据获得的各统计结果分析内存动态申请信息的变化情况,确定内存动态申请信息发生规律性变化时,判定对应上述任意一应用程序存在内存泄漏。这样,能够方便地判断是否存在内存泄漏,准确定位内存泄漏在代码中的位置,方便系统测试人员针对内存泄漏问题对系统进行调试。
文档编号G06F11/36GK102681938SQ20121015005
公开日2012年9月19日 申请日期2012年5月15日 优先权日2012年5月15日
发明者张立震 申请人:青岛海信移动通信技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1