CN103268287A - 检测内存泄露的方法与装置 - Google Patents

检测内存泄露的方法与装置 Download PDF

Info

Publication number
CN103268287A
CN103268287A CN2013102226915A CN201310222691A CN103268287A CN 103268287 A CN103268287 A CN 103268287A CN 2013102226915 A CN2013102226915 A CN 2013102226915A CN 201310222691 A CN201310222691 A CN 201310222691A CN 103268287 A CN103268287 A CN 103268287A
Authority
CN
China
Prior art keywords
internal memory
memory
file
address
trace file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2013102226915A
Other languages
English (en)
Other versions
CN103268287B (zh
Inventor
张维
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Rockchip Electronics Co Ltd
Original Assignee
Fuzhou Rockchip Electronics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fuzhou Rockchip Electronics Co Ltd filed Critical Fuzhou Rockchip Electronics Co Ltd
Priority to CN201310222691.5A priority Critical patent/CN103268287B/zh
Publication of CN103268287A publication Critical patent/CN103268287A/zh
Application granted granted Critical
Publication of CN103268287B publication Critical patent/CN103268287B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Abstract

本发明提供一种检测内存泄露的方法与装置,既可以直观方便地检测内存泄露,又不会使生成的目标代码过大,也可以非常方便的切换检测开关。包括以下步骤:启动程序;分配新内存时,根据内存分配的地址,在设定的路径内生成内存跟踪文件,内存跟踪文件的内容或文件名与分配的内存地址、分配内存的文件或分配内存的源代码的行号相关;释放内存时,根据传进的内存地址,删除相应的内存跟踪文件。当程序运行完毕之后,可以根据设定的路径内所存在的内存跟踪文件判断内存泄露的情况。若设定的路径内存在未删除的内存跟踪文件,则说明有分配的内存未被释放。

Description

检测内存泄露的方法与装置
技术领域
本发明涉及计算机领域,尤其涉及一种检测计算机程序运行过程中内存泄露的方法与装置。
背景技术
在使用支持有内存分配的语言,(例如C,C+,C++,OBJECTIVE-C语言)过程中,需要大量的手动分配内存,而分配之后的释放时常会遗忘,造成内存泄漏,因此对于内存泄漏的检测是十分必要的。
目前,业界已经有许多代码和工具用于做内存泄漏的检测,但是通过代码运行后进行内存泄漏检测,其检测后的内容不直观,还需要分析是哪一行的代码存在内存泄漏。如果使用工具进行检测,消耗的成本比较大,而且可能会产生漏测的情况。而且通常的测量方式存在生成的目标代码过大,检测开关切换不方便等问题。
发明内容
本发明的目的在于,提供一种检测内存泄露的方法与装置,既可以直观方便地检测内存泄露,又不会使生成的目标代码过大,也可以非常方便的切换检测开关。
为实现上述发明目的,本发明提供了一种检测内存泄露的方法,包括以下步骤:
启动程序;
分配新内存时,根据内存分配的地址,在设定的路径内生成内存跟踪文件,内存跟踪文件的内容或文件名与分配的内存地址、分配内存的文件或分配内存的源代码的行号相关;
释放内存时,根据传进的内存地址,删除相应的内存跟踪文件。
优选地,在步骤启动程序与步骤分配新内存之间,进行步骤:
创立内存跟踪文件夹;
在步骤分配新内存时,根据内存分配的地址,在内存跟踪文件夹内生成内存跟踪文件。
优选地,所述内存跟踪文件的文件名为分配的内存的地址号,文件内容为分配内存的文件和分配内存的源代码的行号。
优选地,在步骤启动程序之后,判断是否检测内存泄露,若是,则进行步骤:根据内存分配的地址,在设定的路径内生成内存跟踪文件;若否,不检测内存泄露。
更优选地,若不检测内存泄露,使用程序语言自身函数进行内存的分配与释放。
优选地,分配新内存通过运行定义的分配内存宏实现 ,所述分配内存宏与以下参数相关 :要分配的内存的地址、代码文件的名称以及程序代码的行号;所述释放内存是通过定义的释放内存宏实现的,所述释放内存与参数:分配的内存的地址相关。
更优选地,所述判断是否检测内存泄露是通过检测配置文件中检测开关是否开启进行判断。 
优选地,所述程序的源代码使用C,C+,C++或OBJECTIVE-C语言编写。
为实现本发明的另一个发明目的,本发明提供了一种检测内存泄露的装置,所述检测内存泄露的装置包括以下模块:
生成模块,分配新内存时,根据内存分配的地址,在设定的路径内生成内存跟踪文件,内存跟踪文件的内容或文件名与分配的内存地址、分配内存的文件或分配内存的源代码的行号相关;
删除模块,用于释放内存时,根据传进的内存地址,删除相应的内存跟踪文件。
优选地,所述生成模块还用于创立内存跟踪文件夹,在步骤分配新内存时,根据内存分配的地址,在内存跟踪文件夹内生成内存跟踪文件,所述内存跟踪文件的文件名为分配的内存的地址号,文件内容为分配内存的文件和分配内存的源代码的行号。
与现有技术不同地,本发明通过分配新内存时,根据内存分配的地址,在设定的路径内生成内存跟踪文件,然后释放内存时,根据传进的内存地址,删除相应的内存跟踪文件。由于内存跟踪文件的内容或文件名与分配的内存地址、分配内存的文件或分配内存的源代码的行号相关;因此当程序运行完毕之后,可以根据设定的路径内所存在的内存跟踪文件判断内存泄露的情况。若设定的路径内存在未删除的内存跟踪文件,则说明有分配的内存未被释放。本发明操作十分方便,且不会使生成的目标代码过大,通过肉眼观察即可很直观地发现代码文件中是否出现内存泄漏的问题。而且本发明布署方便,无需工具,不需要开发人员具备很强的代码调试能力;同时不需要开发人员全程参与,减小测试时对开发人员的依赖。
附图说明
图1为本发明具体实施方式所述检测内存泄露的方法的流程图;
图2为本发明具体实施方式所述检测内存泄露的装置的模块图。
具体实施方式
为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
请参阅图1本实施例提供了一种检测内存泄露的方法,包括以下步骤:
S101启动程序;
S102判断是否检测内存泄露,若是,则进行内存泄露检测;若否,不检测内存泄露,进行步骤S106使用程序语言自身函数进行内存的分配与释放。
进行内存泄露检测的步骤具体如下,
S103创立内存跟踪文件夹;
S104分配新内存时,根据内存分配的地址,在内存跟踪文件夹内生成内存跟踪文件,内存跟踪文件的内容或文件名与分配的内存地址、分配内存的文件或分配内存的源代码的行号相关;在某些实施例中,所述内存跟踪文件的文件名为分配的内存的地址号,文件内容为分配内存的文件和分配内存的源代码的行号。这样可以更加方便直观地根据文件名以及文件中保存的内容得知哪个代码文件的哪一段程序代码分配的内存没有被释放,操作人员即可采取相应措施。
在某些实施例中,可以采用与“创立内存跟踪文件夹,进而在后续分配内存时,将内存跟踪文件生成在创立的内存跟踪文件夹内”这一方案不同的技术方案。设定的路径可以是设定的文件夹,也可以是盘符下的根目录。例如用于生成内存跟踪文件的设定的文件夹可以不必是创立的内存跟踪文件夹,而直接指定一个现有的文件或指定的目标文件夹。
S105释放内存时,根据传进的内存地址,删除相应的内存跟踪文件。
在结束程序的时候,可以手动或者使用工具来分析跟踪目录,以得到内存泄漏的信息。例如根据各文件中保存的内容进行统计形成一个内存泄露表,根据内存泄露表即可得知各个代码文件存在的内存泄露的严重程度。
在某些实施例中,设计内存管理的函数如下:
void* et_alloc(void **ppAddr,int iCount, char* szFile, int iLine);
这是分配内存的函数
在这个函数中,将分配内存,同时创建跟踪文件,记录行号和文件名
ppAddr这个二级指针是将要分配内存的地址
szFile是代码文件名
iLine是行号
void et_free(void **ppAddr);
这是释放内存的函数,同时还要删除内存跟踪文件。
分配新内存通过运行定义的分配内存宏实现,所述分配内存宏与以下参数相关 :要分配的内存的地址、代码文件的名称以及程序代码的行号;所述释放内存是通过定义的释放内存宏实现的,所述释放内存与参数:分配的内存的地址相关。同时宏还用于获取文件名,代码的行号等参数,并把这些信息传给相应的函数,生成内存跟踪文件,或删除相应的内存跟踪文件。
某些实施例中,文件标记不仅适用在跟踪文件,同时适用在配置中。
在相应的情况下,需要在一套已经生成的二进制可执行文件中同时支持检测与不检测。
可以把检测开关放在配置文件中,需要的时候打开检查。为方便检测开关的切换,在优选的实施例中,可以通过配置文件实现检测开关的切换,例如可以将检测开关放置在文件根目录下,需要切换检测与否时,找到检测文件,修改0或1(当然在具体实现时,有可能是true/false,也有可能是0/1,也有可能是on/off),就可以实现配置,无需重新编译。
这适用在已经把可执行程序发布给使用者,然后又需要在不重新编译的情况下进行泄漏检查
做法就是在et_alloc和et_free这一套分配和释放的函数中,读取全局的一个变量,而这一全局变量,在程序启动时,就从配置文件中读取了。
在程序启动时,对内存泄漏是否进行检测做一判定,内存泄漏是否进行检测的判定具体为:定义一配置文件,该配置文件设置有一是否进行检测的开关,该配置文件的内容配置为0时,则检测开关关闭,为1时,则检测开关开启。判断是否检测内存泄露是通过检测配置文件中检测开关是否开启进行判断。
上述实施例所述程序的源代码使用C,C+,C++或OBJECTIVE-C语言编写。
本发明的上述实施例可以适用于:c语言,c++语言(可以相应的扩展new,delete),objective-c
上述实施例具有如下优势:可以直观地发现程序中内存泄露的问题,并能迅速找到泄露的原因;
布署方便,成本低廉;不需要开发人员全程参与,减小测试时对开发人员的依赖。还可以便于异地开发调试,只需要将测试后的相应内存跟踪文件夹或内存跟踪文件通过网络发送给分析、解决问题的人员即可。
如图2所示,本发明还提供了一种检测内存泄露的装置20,所述检测内存泄露的装置包括以下模块:
生成模块201,分配新内存时,根据内存分配的地址,在设定的路径内生成内存跟踪文件,内存跟踪文件的内容或文件名与分配的内存地址、分配内存的文件或分配内存的源代码的行号相关;在某些实施例中,所述生成模块还用于创立内存跟踪文件夹,在步骤分配新内存时,根据内存分配的地址,在内存跟踪文件夹内生成内存跟踪文件,所述内存跟踪文件的文件名为分配的内存的地址号,文件内容为分配内存的文件和分配内存的源代码的行号。
删除模块202,用于释放内存时,根据传进的内存地址,删除相应的内存跟踪文件。
以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种检测内存泄露的方法,包括以下步骤:
启动程序;
分配新内存时,根据内存分配的地址,在设定的路径内生成内存跟踪文件,内存跟踪文件的内容或文件名与分配的内存地址、分配内存的文件或分配内存的源代码的行号相关;
释放内存时,根据传进的内存地址,删除相应的内存跟踪文件。
2.根据权利要求1所述的检测内存泄露的方法,其特征在于,在步骤启动程序与步骤分配新内存之间,进行步骤:
创立内存跟踪文件夹;
在步骤分配新内存时,根据内存分配的地址,在内存跟踪文件夹内生成内存跟踪文件。
3.根据权利要求1所述的检测内存泄露的方法,其特征在于,所述内存跟踪文件的文件名为分配的内存的地址号,文件内容为分配内存的文件和分配内存的源代码的行号。
4.根据权利要求1所述的检测内存泄露的方法,其特征在于,在步骤启动程序之后,判断是否检测内存泄露,若是,则进行步骤:根据内存分配的地址,在设定的路径内生成内存跟踪文件;若否,不检测内存泄露。
5.根据权利要求4所述的检测内存泄露的方法,其特征在于,若不检测内存泄露,使用程序语言自身函数进行内存的分配与释放。
6.根据权利要求4所述的检测内存泄露的方法,其特征在于,所述判断是否检测内存泄露是通过检测配置文件中检测开关是否开启进行判断。
7.根据权利要求1至6任意一项所述的检测内存泄露的方法,其特征在于,
分配新内存通过运行定义的分配内存宏实现,所述分配内存宏与以下参数相关:要分配的内存的地址、代码文件的名称以及程序代码的行号;所述释放内存是通过定义的释放内存宏实现的,所述释放内存与参数:分配的内存的地址相关。
8.根据权利要求1至6任意一项所述的检测内存泄露的方法,其特征在于,所述程序的源代码使用C,C+,C++或OBJECTIVE-C语言编写。
9.一种检测内存泄露的装置,其特征在于,所述检测内存泄露的装置包括以下模块:
生成模块,分配新内存时,根据内存分配的地址,在设定的路径内生成内存跟踪文件,内存跟踪文件的内容或文件名与分配的内存地址、分配内存的文件或分配内存的源代码的行号相关;
删除模块,用于释放内存时,根据传进的内存地址,删除相应的内存跟踪文件。
10.根据权利要求9所述的检测内存泄露的装置,其特征在于,
所述生成模块还用于创立内存跟踪文件夹,在步骤分配新内存时,根据内存分配的地址,在内存跟踪文件夹内生成内存跟踪文件,所述内存跟踪文件的文件名为分配的内存的地址号,文件内容为分配内存的文件和分配内存的源代码的行号。
CN201310222691.5A 2013-06-05 2013-06-05 检测内存泄露的方法与装置 Active CN103268287B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310222691.5A CN103268287B (zh) 2013-06-05 2013-06-05 检测内存泄露的方法与装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310222691.5A CN103268287B (zh) 2013-06-05 2013-06-05 检测内存泄露的方法与装置

Publications (2)

Publication Number Publication Date
CN103268287A true CN103268287A (zh) 2013-08-28
CN103268287B CN103268287B (zh) 2017-03-15

Family

ID=49011918

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310222691.5A Active CN103268287B (zh) 2013-06-05 2013-06-05 检测内存泄露的方法与装置

Country Status (1)

Country Link
CN (1) CN103268287B (zh)

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105243003A (zh) * 2015-09-09 2016-01-13 浪潮(北京)电子信息产业有限公司 内存分配的监测方法及装置
CN105243011A (zh) * 2015-09-09 2016-01-13 浪潮(北京)电子信息产业有限公司 内存泄露定位方法及装置
CN105302712A (zh) * 2014-07-17 2016-02-03 南京普爱射线影像设备有限公司 一种c++内存泄漏的检测方法
WO2016029723A1 (zh) * 2014-08-26 2016-03-03 华为技术有限公司 一种资源泄漏检测方法、装置及系统
CN107346266A (zh) * 2017-06-09 2017-11-14 烽火通信科技股份有限公司 基于VxWorks操作系统的内存分配信息跟踪方法及装置
CN107360317A (zh) * 2017-06-29 2017-11-17 努比亚技术有限公司 应用程序资源泄露的检测方法及移动终端、存储介质
CN107844394A (zh) * 2017-11-15 2018-03-27 杭州迪普科技股份有限公司 一种内存泄漏的定位方法及装置
CN108733567A (zh) * 2018-05-24 2018-11-02 北京智芯微电子科技有限公司 软件资源泄露情况的监测方法及系统
CN112654981A (zh) * 2018-08-06 2021-04-13 纳宝韦伯通有限会社 利用图像匹配的标志检测方法、装置及程序
CN113688052A (zh) * 2021-08-31 2021-11-23 南方电网科学研究院有限责任公司 一种电表应用程序内存泄露监测方法、终端、设备和介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101201789A (zh) * 2006-12-15 2008-06-18 中兴通讯股份有限公司 检测项定位系统
CN101539870A (zh) * 2008-03-21 2009-09-23 中兴通讯股份有限公司 内存泄漏检测装置及方法
US7823021B2 (en) * 2005-05-26 2010-10-26 United Parcel Service Of America, Inc. Software process monitor

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7823021B2 (en) * 2005-05-26 2010-10-26 United Parcel Service Of America, Inc. Software process monitor
CN101201789A (zh) * 2006-12-15 2008-06-18 中兴通讯股份有限公司 检测项定位系统
CN101539870A (zh) * 2008-03-21 2009-09-23 中兴通讯股份有限公司 内存泄漏检测装置及方法

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105302712A (zh) * 2014-07-17 2016-02-03 南京普爱射线影像设备有限公司 一种c++内存泄漏的检测方法
WO2016029723A1 (zh) * 2014-08-26 2016-03-03 华为技术有限公司 一种资源泄漏检测方法、装置及系统
US10289472B2 (en) 2014-08-26 2019-05-14 Huawei Technologies Co., Ltd. Resource leak detection method, apparatus, and system
CN105243003A (zh) * 2015-09-09 2016-01-13 浪潮(北京)电子信息产业有限公司 内存分配的监测方法及装置
CN105243011A (zh) * 2015-09-09 2016-01-13 浪潮(北京)电子信息产业有限公司 内存泄露定位方法及装置
CN107346266A (zh) * 2017-06-09 2017-11-14 烽火通信科技股份有限公司 基于VxWorks操作系统的内存分配信息跟踪方法及装置
CN107360317A (zh) * 2017-06-29 2017-11-17 努比亚技术有限公司 应用程序资源泄露的检测方法及移动终端、存储介质
CN107844394A (zh) * 2017-11-15 2018-03-27 杭州迪普科技股份有限公司 一种内存泄漏的定位方法及装置
CN107844394B (zh) * 2017-11-15 2020-12-29 杭州迪普科技股份有限公司 一种内存泄漏的定位方法及装置
CN108733567A (zh) * 2018-05-24 2018-11-02 北京智芯微电子科技有限公司 软件资源泄露情况的监测方法及系统
CN112654981A (zh) * 2018-08-06 2021-04-13 纳宝韦伯通有限会社 利用图像匹配的标志检测方法、装置及程序
CN113688052A (zh) * 2021-08-31 2021-11-23 南方电网科学研究院有限责任公司 一种电表应用程序内存泄露监测方法、终端、设备和介质

Also Published As

Publication number Publication date
CN103268287B (zh) 2017-03-15

Similar Documents

Publication Publication Date Title
CN103268287A (zh) 检测内存泄露的方法与装置
CN104391795B (zh) 一种分布式系统中自动化测试覆盖率的测试方法及系统
CN104461846B (zh) 检测应用程序耗电量的方法和装置
CN102681938B (zh) 一种内存泄漏检测方法及装置
CN101236522B (zh) 硬件模块的测试方法与装置
CN102789416A (zh) 面向bit软件测试的存储器故障注入方法及其模拟器
CN106681912A (zh) 用于Android系统的代码覆盖率的自动化测试方法及装置
CN102722436A (zh) 一种增量覆盖信息的统计方法和装置
CN101719095A (zh) 一种回归测试的管理方法及装置
CN103744759A (zh) 一种Linux系统下无人值守磁盘性能及稳定性验证方法
CN101799506B (zh) 基于脚本控制的芯片测试方法、装置及系统
CN105183592B (zh) 用于支持性能分析的方法和装置
CN105068921A (zh) 基于App对比分析的Android应用商店可信度评价方法
CN105808417A (zh) 自动化测试方法及代理服务器
CN103186456A (zh) 一种系统测试的方法和装置
CN104375937A (zh) 一种自动化测试结果持续集成整合方法及系统
CN103455414A (zh) 获取控件的逻辑位置的方法及装置
CN105335246A (zh) 一种基于问答网站分析的程序崩溃缺陷自动修复方法
CN102722438B (zh) 一种内核调试的方法和设备
CN102043720A (zh) 利用sql语句自动生成测试数据的方法和装置
CN109032929A (zh) 一种程序日志记录获取方法、装置及电子设备
CN104516817A (zh) 一种内存泄漏检测方法及装置
CN103744776A (zh) 一种基于符号化函数摘要的静态分析方法及系统
CN103279334A (zh) 一种android软件快速动态检测装置和方法
CN110674026A (zh) 导航轨迹模拟的方法、装置、存储介质和终端设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: 350000 Fuzhou Gulou District, Fujian, software Avenue, building 89, No. 18

Applicant after: FUZHOU ROCKCHIP ELECTRONICS CO., LTD.

Address before: 350000 Fuzhou Gulou District, Fujian, software Avenue, building 89, No. 18

Applicant before: Fuzhou Rockchip Semiconductor Co., Ltd.

COR Change of bibliographic data
C14 Grant of patent or utility model
GR01 Patent grant
CP01 Change in the name or title of a patent holder

Address after: 350000 building, No. 89, software Avenue, Gulou District, Fujian, Fuzhou 18, China

Patentee after: Ruixin Microelectronics Co., Ltd

Address before: 350000 building, No. 89, software Avenue, Gulou District, Fujian, Fuzhou 18, China

Patentee before: Fuzhou Rockchips Electronics Co.,Ltd.

CP01 Change in the name or title of a patent holder