《一种嵌入式设备及其检测和定位内存泄漏的方法.pdf》由会员分享,可在线阅读,更多相关《一种嵌入式设备及其检测和定位内存泄漏的方法.pdf(9页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN102375776A43申请公布日20120314CN102375776ACN102375776A21申请号201010261728122申请日20100818G06F11/3420060171申请人康佳集团股份有限公司地址518053广东省深圳市华侨城康佳集团发展中心72发明人何银南蔡章盛74专利代理机构深圳市万商天勤知识产权事务所普通合伙44279代理人顾光一54发明名称一种嵌入式设备及其检测和定位内存泄漏的方法57摘要本发明涉及一种嵌入式设备及其检测和定位内存泄漏的方法,包括如下步骤第一步,利用接口函数显示所有在记录的内存使用记录,调用此函数获取并记录初始内存使用情况;。
2、第二步,对所述嵌入式设备进行一系列相关操作,再回到初始状态,再次调用所述接口函数获取并记录实时内存使用情况;第三步,比较所述初始内存使用情况和实时内存使用情况,所述实时内存使用情况中未释放的内存即为泄漏内存。本发明公开的一种嵌入式设备及其检测和定位内存泄漏的方法,不用额外增加内存开销,操作简单,方便测试人员进行代码测试和定位内存泄漏。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书1页说明书5页附图2页CN102375783A1/1页21一种嵌入式设备检测和定位内存泄漏的方法,其特征在于,包括如下步骤第一步,利用接口函数显示所有在记录的内存使用记录,调用此函数获取并记录。
3、初始内存使用情况;第二步,对所述嵌入式设备进行一系列相关操作,再回到初始状态,再次调用所述接口函数获取并记录实时内存使用情况;第三步,比较所述初始内存使用情况和实时内存使用情况,所述实时内存使用情况中未释放的内存即为泄漏内存。2如权利要求1所述的检测和定位内存泄漏的方法,其特征在于,在所述第三步中还通过C语言的下述语句PRINTFNSSDN,_FILE_,_FUNCTI0N_,_LINE_来标记打印出所述嵌入式设备的源程序中导致内存泄漏的文件名、函数名和行号。3如权利要求1所述的检测和定位内存泄漏的方法,其特征在于,在所述第三步中,还将比较所述初始内存使用情况和实时内存使用情况的结果,输出到一。
4、个文件中。4如权利要求1所述的检测和定位内存泄漏的方法,其特征在于,在所述第二步中,定义替换函数对产生内存使用的函数和释放内存使用的函数进行宏替换,然后在所述替换函数中获取并记录内存使用情况。5一种嵌入式设备,使用如权利要求1至4所述的方法,包括控制模块,电源模块,和一个以上的子功能模块;其特征在于,还包括内存泄漏的检测和定位模块;所述内存泄漏的检测和定位模块进一步包括内存使用情况函数的创建模块,用于创建内存使用情况函数;子模块进入之前内存使用情况的获取模块,用于在调用所述子功能模块之前获取内存使用情况;子模块进入之后再退出的情况下内存使用情况的获取模块,用于在调用过所述功能子模块后获取内存使。
5、用情况;两者的比较模块,用于比较调用所述功能子模块之前和之后的内存的使用情况;比较结果重定向给输出模块,用于将所述两者的比较模块获得的内存使用情况重定向输出到指定文件里;根据输出显示内存泄漏所在文件行号模块,用于根据所述的重定向输出文件显示内存泄漏的具体文件名。6如权利要求5所述的嵌入式设备,其特征在于,所述的一个以上的子功能模块包括下载、多媒体、我的应用、视频聊天、在线视频、在线教育、资讯和网络设置。权利要求书CN102375776ACN102375783A1/5页3一种嵌入式设备及其检测和定位内存泄漏的方法0001技术领域本发明涉及一种嵌入式设备及其检测和定位内存泄漏的方法。0002背景技。
6、术在计算机科学中,内存泄漏是指由于疏忽或错误造成的程序未能及时释放已经不再使用的内存的情况。所以内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费,这块内存就不能被再次使用,我们就说这块内存泄漏了。0003现有技术中的检测内存泄漏的方法,是通过建立动态存储内存块信息的链表,并设定同一申请位置长生存时间内存块数量阈值;遍历链表,检查各链表元素存储的内存块信息得到各内存块的生存时间,将各长生存时间内存块根据所述各长生存时间内存块被申请的位置分类,若同一申请位置上被申请的所述长生存时间内存块数量大于所述同一申请位置长生存时间内存块。
7、数量阈值,则认为所述各长生存时间内存块发生了内存泄漏。这种检测和定位内存泄漏的方法需要增加内存开销,而且操作复杂,不利于测试人员进行代码测试和定位内存泄漏。0004发明内容本发明的主要目的在于提出一种嵌入式设备及其检测和定位内存泄漏的方法,方便测试人员进行代码测试和定位内存泄漏。0005本发明公开了一种嵌入式设备检测和定位内存泄漏的方法,包括如下步骤第一步,利用接口函数显示所有在记录的内存使用记录,调用此函数获取并记录初始内存使用情况;第二步,对所述嵌入式设备进行一系列相关操作,再回到初始状态,再次调用所述接口函数获取并记录实时内存使用情况;第三步,比较所述初始内存使用情况和实时内存使用情况,。
8、所述实时内存使用情况中未释放的内存即为泄漏内存。0006本发明公开的检测和定位内存泄漏的方法,在所述第三步中还通过C语言的下述语句0007PRINTFNSSDN,_FILE_,_FUNCTION_,_LINE_0008来标记打印出所述嵌入式设备的源程序中导致内存泄漏的文件名、函数名和行号。0009在所述第三步中,还将比较所述初始内存使用情况和实时内存使用情况的结果,输出到一个文件中。0010在所述第二步中,定义替换函数对产生内存使用的函数和释放内存使用的函数进行宏替换,然后在所述替换函数中获取并记录内存使用情况。0011本发明还公开了一种嵌入式设备,使用前述的检测和定位内存泄漏的方法,包括控制。
9、模块,电源模块,和一个以上的子功能模块;还包括内存泄漏的检测和定位模块;所述内存泄漏的检测和定位模块进一步包括0012内存使用情况函数的创建模块,用于创建内存使用情况函数;0013子模块进入之前内存使用情况的获取模块,用于在调用所述子功能模块之前获取内存使用情况;0014子模块进入之后再退出的情况下内存使用情况的获取模块,用于在调用过所述功能子模块后获取内存使用情况;说明书CN102375776ACN102375783A2/5页40015两者的比较模块,用于比较调用所述功能子模块之前和之后的内存的使用情况;0016比较结果重定向给输出模块,用于将所述两者的比较模块获得的内存使用情况重定向输出到。
10、指定文件里;0017根据输出显示内存泄漏所在文件行号模块,用于根据所述的重定向输出文件显示内存泄漏的具体文件名。0018本发明公开的嵌入式设备,所述的一个以上的子功能模块包括下载、多媒体、我的应用、视频聊天、在线视频、在线教育、资讯和网络设置。0019本发明公开的一种嵌入式设备及其检测内存泄漏的方法,不用额外增加内存开销,操作简单,方便测试人员进行代码测试和定位内存泄漏。附图说明0020图1为本发明的嵌入式设备检测和定位内存泄露情况的功能模块示意图。0021图2为本发明的嵌入式设备检测和定位内存泄露情况的方法流程图。0022具体实施方式下面结合附图和具体实施方式对本发明作进一步详细说明。002。
11、3本发明提出了一种检测和定位内存泄漏的方法,如图1所示为本发明的检测和定位内存泄露情况的功能模块示意图。技术方案由六个模块组成内存使用情况函数的创建模块101、子模块进入之前内存使用情况的获取模块102、子模块进入之后再退出的情况下内存使用情况的获取模块103、两者的比较模块104、比较结果重定向给输出模块105、根据输出显示内存泄漏所在文件行号模块106。0024所述的内存使用情况函数的创建模块101指的是创建内存使用情况函数;所述的子模块进入之前内存使用情况的获取模块102指的是在子模块进入功能之前获取内存使用情况;所述的子模块进入之后再退出内存使用情况的获取模块103指的是从进入子模块后。
12、退出所述子模块获取此时内存使用情况;所述的两者的比较模块104指的是比较进入子模块功能之前和进入之后退出所述子模块功能之后内存的使用情况;所述的比较结果重定向给输出模块105指的是将进入子模块功能之前和进入之后退出所述子模块功能之后内存的使用情况比较结果重定向输出到指定文件里;所述的根据输出显示内存泄漏所在文件行号模块106指的是根据所述的重定向输出文件显示内存泄漏的具体哪个文件的哪行没有释放内存。0025一般嵌入式设备不仅包括电源模块、控制模块等硬件部分,在软件上还分为若干个子功能模块,例如网络电视的子功能模块有下载、多媒体、我的应用、视频聊天、在线视频、在线教育、资讯、网络设置等,如果需要。
13、判断下载子功能模块代码部分是否有内存泄漏的情况,可以在进入下载子功能模块之前获取一次内存使用情况,然后进入下载子功能模块进行若干次操作,例如进行电视剧下载、电影下载、我的下载、影视搜索等之后再退出,然后再获取一次内存使用情况,比较两者的差别,且将差别输出到一个文件例如MEMORYUSETXT文件里,屏幕打印出对比结果,显示具体哪一个文件的具体哪一个行号分配的内存没有释放,导致内存泄漏。0026在现有技术中是通过检查特定内存块的信息来得到内存块的生存时间,本发明是对产生内存使用的函数和释放内存使用的函数进行宏替换,用自己的函数替换MALLOC等产生内存使用的函数和FREE等产生释放内存的函数。在。
14、自己的函数中对内存使用情况作说明书CN102375776ACN102375783A3/5页5记录,从而“获取内存使用情况”来获取内存的使用和释放,判断内存是否泄漏。0027如图2所示为本发明的检测和定位内存泄露情况的方法流程图,在检测和定位内存泄漏功能模块中,首先获取进入子模块之前的内存使用情况,然后再获取进入子模块之后再退出的内存使用情况,然后比较前述两种内存使用情况,判断两者是否有差别,如果有差别则分别打印前后内存使用情况,再比较前后内存使用情况,并且将比较结果重新定向到一个文件里,退出即可。如果没有差别,则直接退出。0028在图2中,“分别打印前后内存使用情况”,是在串口输出终端上用PR。
15、INTF打印出来的信息,不是人工比较前后内存使用情况,是控制中心自动对代码进行比较,并且将比较结果显示出来,所谓重定向就是不想让打印输出的东西在终端上显示,而是输出到一个指定的文件里,例如文本文件里。0029以下为本发明的C语言程序源代码0030DEFINEFILENAME2600031/0032/结构定义/0033/0034TYPEDEFSTRUCT00350036VOIDPMEM;0037INTISIZE;0038CHARSZFILEFILENAME_MAX;0039INTILINE;0040MEM_USE_T;0041TYPEDEFSTDMAPSTL_MAPMEMUSE;0042TYPE。
16、DEFSTL_MAPMEMUSEITERATORSTL_MAPMEMUSEITER;0043/0044/本地变量/0045/0046STATICSTL_MAPMEMUSELC_MAPMEMUSE;0047/0048/功能0049/内存分配调试初始化0050/参数0051/无0052/返回值0053/无0054/0055VOIDKKMEM_INITVOID00560057LC_MAPMEMUSECLEAR;说明书CN102375776ACN102375783A4/5页600580059/0060/功能0061/记录内存分配信息0062/参数0063/ISIZE分配的大小0064/PSZFILEN。
17、AME调用此函数的文件名0065/ILINE调用此函数的行号0066/返回值0067/分配的内存地址0068/0069VOIDKKMEM_MALLOCSIZE_TISIZE,CONSTCHARPSZFILENAME,INTILINE00700071MEM_USE_TSTMEMUSE;0072STRNCPYSTMEMUSESZFILE,PSZFILENAME,FILENAME_MAX;0073STMEMUSESZFILEFILENAME_MAX10;0074STMEMUSEILINEILINE;0075STMEMUSEISIZEISIZE;0076STMEMUSEPMEMMALLOCISIZE;。
18、0077LC_MAPMEMUSESTMEMUSEPMEMSTMEMUSE;0078RETURNSTMEMUSEPMEM;00790080/0081/功能0082/释放分配的内存0083/参数0084/PMEM分配的内存地址0085/PSZFILENAME调用此函数的文件名0086/ILINE调用此函数的行号0087/返回值0088/无0089/0090VOIDKKMEM_FREEVOIDPMEM,CONSTCHARPSZFILENAME,INTILINE00910092STL_MAPMEMUSEITERITER;0093IFITERLC_MAPMEMUSEFINDPMEMLC_MAPMEMUS。
19、EEND00940095CONSTCHARPSZSHORTNAMESTRRCHRPSZFILENAME,/;0096IFPSZSHORTNAMENULL说明书CN102375776ACN102375783A5/5页700970098PSZSHORTNAMESTRRCHRPSZFILENAME,;00990100IFPSZSHORTNAMENULL01010102PSZSHORTNAMEPSZFILENAME;01030104ELSE01050106PSZSHORTNAME;01070108FPRINTFSTDERR,ERROR,FREEPMEMPNOTINRECORDS0109POSSDN,P。
20、MEM,PSZSHORTNAME,ILINE;0110FREEPMEM;01110112ELSE01130114FREEPMEM;0115LC_MAPMEMUSEERASEPMEM;011601170118在上述源代码中,有3个功能模块1内存分配调试初始化;2记录内存分配信息;3释放分配的内存。本发明提供的接口函数显示所有在记录的内存使用记录,调用此函数获取内存使用情况,进行一系列操作后再回到初始状态,再次调用此函数获取内存使用情况,二者对比即可发现分配后未释放的内存,以及产生这些内存使用的文件和行号。在哪里分配内存的,可以通过下述语句0119PRINTFNSSDN,_FILE_,_FUNCTION_,_LINE_来标记打印出文件名、函数名和行号。0120以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。说明书CN102375776ACN102375783A1/2页8图1说明书附图CN102375776ACN102375783A2/2页9图2说明书附图CN102375776A。