一种内存泄漏检测方法及装置.pdf

上传人:1*** 文档编号:4043313 上传时间:2018-08-12 格式:PDF 页数:11 大小:620.82KB
返回 下载 相关 举报
摘要
申请专利号:

CN201410811137.5

申请日:

2012.05.15

公开号:

CN104516817A

公开日:

2015.04.15

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 11/36申请日:20120515|||公开

IPC分类号:

G06F11/36

主分类号:

G06F11/36

申请人:

青岛海信移动通信技术股份有限公司

发明人:

张立震

地址:

266100山东省青岛市崂山区株洲路151号

优先权:

专利代理机构:

北京同达信恒知识产权代理有限公司11291

代理人:

黄志华

PDF下载: PDF下载
内容摘要

本发明公开了一种内存泄漏检测方法及装置,该方法包括:系统每启动一个应用程序,针对该应用程序建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统计任意一应用程序对应的内存动态申请信息;根据获得的各统计结果分析内存动态申请信息的变化情况,确定内存动态申请信息发生规律性变化时,判定对应上述任意一应用程序存在内存泄漏。这样,能够方便地判断是否存在内存泄漏,准确定位内存泄漏在代码中的位置,方便系统测试人员针对内存泄漏问题对系统进行调试。

权利要求书

权利要求书
1.  一种内存泄漏检测方法,其特征在于,所述方法包括:
系统每启动一个应用程序,针对该应用程序建立相应的内存动态申请信 息,并在任意一个应用程序执行过程中,按照预设方式多次统计所述任意一应 用程序对应的内存动态申请信息;
根据获得的各统计结果分析所述内存动态申请信息的变化情况,确定所述 内存动态申请信息发生规律性变化时,判定所述任意一应用程序存在内存泄 漏;
其中,确定所述内存动态申请信息发生规律性变化时,判定所述任意一应 用程序存在内存泄漏,包括:根据获得的各统计结果,确定任意一应用程序每 一次未释放的动态内存总大小按照时间顺序组成的数列或/和未释放的动态申 请总次数按照时间顺序组成的数列存在预设范围内的等差变化时,则判定所述 任意一应用程序存在内存泄漏,并通过动态申请语句所在文件名称和行号定位 内存泄漏的位置;并显示内存泄漏判定结果,以及所述动态申请语句所在文件 名称和行号。

2.  如权利要求1所述的方法,其特征在于,所述按照预设方式多次统计 所述任意一应用程序对应的内存动态申请信息,包括:
按照预设时长周期性统计所述任意一应用程序对应的内存动态申请信息; 或者
按照预设次数统计所述任意一应用程序对应的内存动态申请信息。

3.  如权利要求1所述的方法,其特征在于,所述内存动态申请信息至少 包括动态申请语句所在的文件名称和行号,以及未释放的动态内存总大小或/ 和未释放的动态申请总次数。

4.  如权利要求1所述的方法,其特征在于,所述统计内存动态申请信息, 包括:
采用实时统计的方式统计内存动态申请信息;或者
采用触发方式统计内存动态申请信息。

5.  如权利要求1所述的方法,其特征在于,按照预设方式多次统计所述 任意一应用程序对应的内存动态申请信息之后,进一步包括:
将按照预设方式多次统计所述任意一应用程序对应的内存动态申请信息 进行显示;其中,内存动态申请信息显示方式包括显示内存动态空间中未释放 的所有程序列表,单击该程序列表中某一程序显示上述内存动态申请信息;或 者,以多条详细信息列表形式显示,每条详细信息显示内存动态空间中的内存 动态申请信息。

6.  一种内存泄漏检测装置,其特征在于,该装置包括:
申请信息建立模块,用于当系统每启动一个应用程序,针对该应用程序建 立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方 式多次统计所述任意一应用程序对应的内存动态申请信息;
判定模块,用于根据获得的各统计结果分析所述内存动态申请信息的变化 情况,确定所述内存动态申请信息发生规律性变化时,判定所述任意一应用程 序存在内存泄漏;
所述判定模块,具体用于根据获得的各统计结果,确定任意一应用程序每 一次未释放的动态内存总大小按照时间顺序组成的数列或/和未释放的动态申 请总次数按照时间顺序组成的数列存在预设范围内的等差变化时,则判定所述 任意一应用程序存在内存泄漏,并通过动态申请语句所在文件名称和行号定位 内存泄漏的位置;并显示内存泄漏判定结果,以及所述动态申请语句所在文件 名称和行号。

7.  如权利要求6所述的装置,其特征在于,所述申请信息建立模块,具 体用于按照预设时长周期性统计所述任意一应用程序对应的内存动态申请信 息;或者按照预设次数统计所述任意一应用程序对应的内存动态申请信息。

8.  如权利要求6所述的装置,其特征在于,所述申请信息建立模块统计 的内存动态申请信息至少包括动态申请语句所在的文件名称和行号,以及未释 放的动态内存总大小或/和未释放的动态申请总次数。

9.  如权利要求6所述的装置,其特征在于,所述申请信息建立模块,具 体用于采用实时统计的方式统计内存动态申请信息;或者采用触发方式统计内 存动态申请信息。

说明书

说明书一种内存泄漏检测方法及装置
本发明申请是申请日为2012年05月15日、申请号为201210150053.2、发明名称为"一种内 存泄漏检测方法及装置"的发明申请的分案申请。
技术领域
本发明涉及通信设备测试领域,尤其涉及一种内存泄漏的检测方法及装 置。
背景技术
当程序运行时,程序中的内存动态空间申请语句会向系统申请用于存储数 据的空间,此时,系统从内存的heap空间中开辟一个动态空间并分配给该申请 程序;当程序运行结束后,系统释放为该程序开辟的动态空间,以便其他程序 运行时继续使用heap空间;此时,可能存在由于程序设计的失误,导致系统未 及时释放临时开辟的动态空间的情况,这种情况即为内存泄漏。
内存泄漏会使系统heap空间越来越小,系统运行速度降低。当内存泄漏达 到一定程度时,可使系统运行非常缓慢,直至系统无法分配出动态空间,即heap 空间耗尽,最终导致整个系统瘫痪。
内存泄漏是软件运行过程中经常遇到的问题,同时又是难以解决的问题, 这是因为在系统刚开始出现内存泄漏时,一般没有明显的表现;当内存泄漏严 重,系统中heap空间被耗尽而导致系统崩溃时,再查找内存泄漏在代码中的位 置就比较困难。
现有技术下,对于解决内存泄漏的查找和定位问题,通常采用在整个系统 中引入内存泄漏检测程序,统计内存动态分配和释放的信息记录在日志文件 中,并根据上述信息得出未释放内存的次数和大小,最终输出日志文件至终端, 方便测试人员进行调试。该发明存在的问题是,由于输出至日志文件的统计信 息为无序排列,测试人员需要进行大量繁琐的工作分析上述统计信息,从而判 断是否存在内存信息,浪费了大量人力,执行效率低,并不能完全排除内存泄 漏问题,复杂的内存泄漏检测程序消耗系统资源,也会使系统负担加重。
综上所述,内存泄漏不利于系统顺畅的运行,而现有技术下的解决方案, 存在内存泄漏检测程序占用系统空间,误差率大,内存泄漏故障排除不充分, 对系统测试人员要求较高,不便于实现等问题。
发明内容
本发明实施例提供一种内存泄漏检测方法及装置,用以解决现有技术中存 在的系统内存泄漏检测过程中,存在的内存泄漏检测程序占用系统空间大,误 差率大,需要浪费大量人力进行内存泄漏判定等问题。
本发明实施例提供的具体技术方案如下:
一种内存泄漏检测方法,所述方法包括:
系统每启动一个应用程序,针对该应用程序建立相应的内存动态申请信 息,并在任意一个应用程序执行过程中,按照预设方式多次统计所述任意一应 用程序对应的内存动态申请信息;
根据获得的各统计结果分析所述内存动态申请信息的变化情况,确定所述 内存动态申请信息发生规律性变化时,判定所述任意一应用程序存在内存泄 漏。
一种内存泄漏检测装置,该装置包括:
申请信息建立模块,系统每启动一个应用程序,针对该应用程序建立相应 的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次 统计所述任意一应用程序对应的内存动态申请信息;
判定模块,用于根据获得的各统计结果分析所述内存动态申请信息的变化 情况,确定所述内存动态申请信息发生规律性变化时,判定上述任意一应用程 序存在内存泄漏。
本发明实施例中,系统每启动一个应用程序,针对该应用程序建立相应的 内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统 计任意一应用程序对应的内存动态申请信息;根据获得的各统计结果分析上述 内存动态申请信息的变化情况,确定该内存动态申请信息发生规律性变化时, 判定对应任意一应用程序存在内存泄漏。结合对内存动态信息中关键数据的统 计,能够方便地判断是否存在内存泄漏,准确定位内存泄漏在代码中的位置, 方便系统测试人员针对内存泄漏问题对系统进行调试。
附图说明
图1为本发明实施例中内存泄漏检测装置结构图;
图2为本发明实施例中内存泄漏检测的具体实施流程;
图3为本发明实施例中内存信息统计过程示意图。
具体实施方式
本发明实施例中,系统每启动一个应用程序,针对该应用程序建立相应的 内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统 计任意一应用程序对应的内存动态申请信息;根据获得的各统计结果分析上述 内存动态申请信息的变化情况,确定该内存动态申请信息发生规律性变化时, 判定对应任意一应用程序存在内存泄漏。结合对内存申请信息中关键数据的统 计,能够方便地判断是否存在内存泄漏,准确定位内存泄漏在代码中的位置, 方便系统测试人员针对内存泄漏问题对系统进行调试。
下面结合附图对本发明优选的实施方式进行详细说明。
参阅图1所示,本发明实施例中的一种内存泄漏检测装置包括申请信息建 立模块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,未释放的动态申请总次数为1;选定待机界面为初始 界面,统计此时未释放的动态内存总大小为0,未释放的动态申请总次数为0; 运行程序A,然后返回初始界面,统计此时未释放的内存总大小为50KB,未 释放的动态申请总次数为1;再次运行程序A,返回初始界面,统计此时未释 放的内存总大小为98KB,未释放的动态申请总次数为2;再次运行程序A, 返回初始界面,统计此时未释放的内存总大小为150KB,未释放的动态申请总 次数为3;再次运行程序A,返回初始界面,统计此时未释放的内存总大小为 199KB,未释放的动态申请总次数为4。系统统计上述三次运行程序A后,内 存动态申请信息中未释放的总大小差值依次为50KB、48KB、52KB、49KB, 则上述程序A的多次统计未释放内存动态总大小组成的数列存在历次差值的 变化范围均小于5KB的等差变化;内存动态申请信息中为释放的申请总次数 也为等差数列。次数判定程序A存在内存泄漏,需要对该程序进行调试。测试 人员可以综合考虑各种情况,设定上述动态申请信息的变化范围。
程序A的内存动态申请信息可以以悬浮窗口的形式显示在用户操作界面, 在上述多次动态申请信息的统计过程的每个操作步骤中均显示该悬浮窗口,方 便用户实时观察内存动态申请信息。
例如,对手机进行内存泄漏检测时,选择手机的待机界面为初始状态,可 以实时统计此时的内存动态申请信息,也可以由用户触发内存动态申请信息统 计程序后,统计待机界面的内存动态申请信息,将该统计信息显示在手机屏幕 上,并存储到用户指定的区域,根据用户的指示,运行“短消息”程序并进行写 短信并发送短信操作,此时,“短信”程序中的内存动态空间申请代码会为该操 作申请内存动态空间,当短信编写完毕并发送后返回待机界面,统计此时的内 存动态申请信息,将统计信息实时显示在手机屏幕上,并存储到用户指定的区 域,手机屏幕显示项为:
第一次:无;
第二次:存储卡-短信文件-第60行-占用内存动态空间1M-未释放动态申 请1次。
根据用户指示,重复上述过程两次,系统按时间先后次序共显示并存储内 存动态申请信息4条,假如采用多条详细信息列表显示方式,手机屏幕显示项 为:
第一次:无;
第二次:存储卡-短信文件-第60行-占用内存动态空间1M-未释放动态申 请1次;
第三次:存储卡-短信文件-第60行-占用内存动态空间2M-未释放动态申 请2次;
第四次:存储卡-短信文件-第60行-占用内存动态空间3M-未释放动态申 请3次。
对比4次内存动态申请信息,在手机屏幕上显示最终内存泄漏检测结果:
存在内存泄漏!
短信文件-第60行-占用内存动态空间3M-未释放动态申请3次。
因此,可以判定该手机存在内存泄漏问题,其原因可能是,在“短信”程序 中缺少写信息并发送信息操作申请内存动态空间释放的代码。程序测试人员可 以较为快捷地查找到动态泄漏的位置,并进行代码修改。
当程序A运行时,系统为该程序A分配存储数据的动态内存,并在程序A运 行时,统计该程序内存动态申请信息,在系统内存释放的统一接口处添加内存 释放信息记录清除程序,当程序A动态申请的内存被释放时,清除在内存动态 申请信息统计程序统计的程序A的内存动态申请信息。
通过对内存泄漏的准确判断和定位,系统测试人员可以较为快捷地查找存 在内存泄漏问题的代码位置,从而修改代码,完善系统中的应用程序。
综上所述,本发明实施例中,系统每启动一个应用程序,针对该应用程序 建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设 方式多次统计所述任意一应用程序对应的内存动态申请信息;根据获得的各统 计结果分析上述内存动态申请信息的变化情况,确定该内存动态申请信息发生 规律性变化时,判定该任意一应用程序存在内存泄漏。这样,能够方便地判断 是否存在内存泄漏,准确定位内存泄漏在代码中的位置,方便系统测试人员针 对内存泄漏问题对系统进行调试。该方法占用系统内存空间小,对内存泄漏判 断和定位准确,可广泛应用于手机、MP3、MP4、GPS等各种通信设备,方便 系统测试人员针对内存泄漏问题对系统进行调试。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发 明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及 其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

一种内存泄漏检测方法及装置.pdf_第1页
第1页 / 共11页
一种内存泄漏检测方法及装置.pdf_第2页
第2页 / 共11页
一种内存泄漏检测方法及装置.pdf_第3页
第3页 / 共11页
点击查看更多>>
资源描述

《一种内存泄漏检测方法及装置.pdf》由会员分享,可在线阅读,更多相关《一种内存泄漏检测方法及装置.pdf(11页珍藏版)》请在专利查询网上搜索。

本发明公开了一种内存泄漏检测方法及装置,该方法包括:系统每启动一个应用程序,针对该应用程序建立相应的内存动态申请信息,并在任意一个应用程序执行过程中,按照预设方式多次统计任意一应用程序对应的内存动态申请信息;根据获得的各统计结果分析内存动态申请信息的变化情况,确定内存动态申请信息发生规律性变化时,判定对应上述任意一应用程序存在内存泄漏。这样,能够方便地判断是否存在内存泄漏,准确定位内存泄漏在代码中。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1