内存泄漏的检测方法、装置、终端和计算机可读存储介质制造方法及图纸

技术编号:24613291 阅读:17 留言:0更新日期:2020-06-24 01:02
本发明专利技术提出了一种内存泄漏的检测方法、装置、终端和计算机可读存储介质。其中,内存泄漏的检测方法包括:识别编程语言创建的子对象的生命周期;根据生命周期确定子对象的检测周期;根据检测周期,检测生命周期内子对象是否被子对象对应的父对象持有;检测到子对象未被父对象持有,生成并发送泄漏报告。本发明专利技术的检测方法利用子对象与父对象之间的关系,快速检查出用代码检查方法不能查出的内存泄漏问题,提高内存泄漏检测的效率和准确度,并且通过发送泄漏报告至控制台,即使在release版本中也可以将泄漏信息写入日志中,使得供开发人员能够快速定位到发生内存泄漏的对象,从而及时进行调试,确保系统正常运行。

Memory leak detection methods, devices, terminals and computer readable storage media

【技术实现步骤摘要】
内存泄漏的检测方法、装置、终端和计算机可读存储介质
本专利技术涉及内存检测
,具体而言,涉及一种内存泄漏的检测方法、一种内存泄漏的检测装置、一种终端和一种计算机可读存储介质。
技术介绍
苹果系统(IOS)中采用引用计数技术来管理内存,当一个对象没有任何一个地方引用时候,即对象保留数(RetainCount)为0,就会通过自动释放池(Autoreleasepool)自动释放。但是,当对象多次引用,或者自动释放池释放不及等原因,引用计数不是很准确,难免会造成内存泄漏。现有IOS开发中的内存检查,主要是用开发工具XCode中提供的Analyze或者Instruments这两个工具。Analyze是检测代码,从代码结构的逻辑中发现可能的内存泄漏,只能找出代码逻辑简单的内存泄漏,如果代码风格严谨,则用处不大;Instruments是运行后,从对象实际内存持有情况,判断内存泄漏存在地方,要调试运行时才能使用,定位比较麻烦,操作也比较复杂,而且,两种方法都不能跟踪释放版本(release版本)中的内存泄漏。
技术实现思路
本专利技术旨在至少解决现有技术或相关技术中存在的技术问题之一。为此,本专利技术第一方面在于提出了一种内存泄漏的检测方法。本专利技术的第二方面在于提出了一种内存泄漏的检测装置。本专利技术的第三方面在于提出了一种终端。本专利技术的第四方面在于提出了一种计算机可读存储介质。有鉴于此,根据本专利技术的第一方面,提出了一种内存泄漏的检测方法,包括:识别编程语言创建的子对象的生命周期;根据生命周期确定子对象的检测周期;根据检测周期,检测生命周期内子对象是否被子对象对应的父对象持有;检测到子对象未被父对象持有,生成并发送泄漏报告。本专利技术提供的内存泄漏的检测方法,适用于开发人员编程过程中会创建包括子对象和父对象的对象层次结构,其中,子对象设置一个检测子对象与父对象之间连接关系的函数和一个生命周期情况返回函数,定义为生命周期代理(LinkDelegate),识别子对象的生命周期,根据生命周期确定子对象的检测周期,例如,在生命周期内执行3次检测,根据检测周期生成检测指令,以触发子对象自发检测生命周期内该子对象是否被父对象持有,若检测到子对象没有被任何父对象持有,说明在子对象的生命周期内子对象与父对象解除关系,且未释放空间,则确定发生内存泄漏,此时,生成并发送泄漏报告,从而利用子对象与父对象之间的关系,快速检查出用代码检查方法不能查出的内存泄漏问题,实现自动检测内存泄漏功能,提高内存泄漏检测的效率和准确度,并且通过发送泄漏报告至控制台,即使在release版本中也可以将泄漏信息写入日志中,使得供开发人员能够快速定位到发生内存泄漏的对象,从而及时进行调试,确保系统正常运行。当然,不仅可以根据生命周期自动进行周期性检测,还可以人工进行触发子对象检测,以免消耗过多的性能。另外,根据本专利技术提供的上述技术方案中的内存泄漏的检测方法,还可以具有如下附加技术特征:在上述技术方案中,进一步地,生成泄漏报告的步骤,具体包括:采集内存泄漏的子对象的现场信息;根据现场信息分析子对象的调用栈信息;根据现场信息和调用栈信息,生成泄漏报告。在该技术方案中,采集内存泄漏的子对象的现场信息,以通过现场信息反映子对象的位置,并根据现场信息分析子对象的调用栈信息,即与父对象的调用关系,从而反映出代码逻辑,根据现场信息和调用栈信息,生成泄漏报告,使得供开发人员根据泄漏报告能够快速定位到发生内存泄漏的对象,并分析泄漏原因,从而及时进行调试,确保系统正常运行。其中,现场信息包括代码名称、运行信息等。在上述任一技术方案中,进一步地,还包括:释放未被父对象持有的子对象。在该技术方案中,在确认对象发生内存泄漏的情况下,释放未被父对象持有的子对象,从而及时阻止内存继续泄漏,进而避免系统运行速度缓慢等问题,保证系统能够正常运行。在上述任一技术方案中,进一步地,编程语言为Object-c语言。在该技术方案中,IOS开发用的Object-c语言(OC语言)是一种面向对象的编程语言,每个对象都有生命周期,即对象从创建到销毁的运行过程的生命,具体包括对象的初始化、引用、释放,OC语言中的对象可以遵从一种或者多种协议代理(Delegate),利用代理可以一对一的把对象的信息传递给代理实现者。从而利用OC语言机制,在创建对象时,设置生命周期代理,让所有创建的对象都遵从生命周期代理,从而在子对象的生命周期内子对象未被父对象持有时,发出泄漏报告,从而检测出发生内存泄漏,提高内存泄漏检测的效率和准确度。根据本专利技术的第二方面,提出了一种内存泄漏的检测装置,包括存储器、处理器,存储器储存有计算机程序,处理器执行计算机程序时执行:识别编程语言创建的子对象的生命周期;根据生命周期确定子对象的检测周期;根据检测周期,检测生命周期内子对象是否被子对象对应的父对象持有;检测到子对象未被父对象持有,生成并发送泄漏报告。本专利技术提供的内存泄漏的检测装置,适用于开发人员编程过程中会创建包括子对象和父对象的对象层次结构,其中,子对象设置一个检测子对象与父对象之间连接关系的函数和一个生命周期情况返回函数,定义为生命周期代理(LinkDelegate),识别子对象的生命周期,根据生命周期确定子对象的检测周期,例如,在生命周期内执行3次检测,根据检测周期生成检测指令,以触发子对象自发检测生命周期内该子对象是否被父对象持有,若检测到子对象没有被任何父对象持有,说明在子对象的生命周期内子对象与父对象解除关系,且未释放空间,则确定发生内存泄漏,此时,生成并发送泄漏报告,从而利用子对象与父对象之间的关系,快速检查出用代码检查方法不能查出的内存泄漏问题,实现自动检测内存泄漏功能,提高内存泄漏检测的效率和准确度,并且通过发送泄漏报告至控制台,即使在release版本中也可以将泄漏信息写入日志中,使得供开发人员能够快速定位到发生内存泄漏的对象,从而及时进行调试,确保系统正常运行。当然,不仅可以根据生命周期自动进行周期性检测,还可以人工进行触发子对象检测,以免消耗过多的性能。在上述任一技术方案中,进一步地,处理器执行计算机程序时具体执行生成泄漏报告的步骤,具体包括:采集内存泄漏的子对象的现场信息;根据现场信息分析子对象的调用栈信息;根据现场信息和调用栈信息,生成泄漏报告。在该技术方案中,采集内存泄漏的子对象的现场信息,以通过现场信息反映子对象的位置,并根据现场信息分析子对象的调用栈信息,即与父对象的调用关系,从而反映出代码逻辑,根据现场信息和调用栈信息,生成泄漏报告,使得供开发人员根据泄漏报告能够快速定位到发生内存泄漏的对象,并分析泄漏原因,从而及时进行调试,确保系统正常运行。其中,现场信息包括代码名称、运行信息等。在上述任一技术方案中,进一步地,处理器执行计算机程序时具体还会执行:释放未被父对象持有的子对象。在该技术方案中,在确认对象发生内存泄漏的情况下,释放未被父对象持有的子对象,从而及时阻止内存继续泄漏,进而避本文档来自技高网...

【技术保护点】
1.一种内存泄漏的检测方法,其特征在于,包括:/n识别编程语言创建的子对象的生命周期;/n根据所述生命周期确定所述子对象的检测周期;/n根据所述检测周期,检测所述生命周期内所述子对象是否被所述子对象对应的父对象持有;/n检测到所述子对象未被所述父对象持有,生成并发送泄漏报告。/n

【技术特征摘要】
1.一种内存泄漏的检测方法,其特征在于,包括:
识别编程语言创建的子对象的生命周期;
根据所述生命周期确定所述子对象的检测周期;
根据所述检测周期,检测所述生命周期内所述子对象是否被所述子对象对应的父对象持有;
检测到所述子对象未被所述父对象持有,生成并发送泄漏报告。


2.根据权利要求1所述的内存泄漏的检测方法,其特征在于,所述生成泄漏报告的步骤,具体包括:
采集内存泄漏的所述子对象的现场信息;
根据所述现场信息分析所述子对象的调用栈信息;
根据所述现场信息和所述调用栈信息,生成所述泄漏报告。


3.根据权利要求1所述的内存泄漏的检测方法,其特征在于,还包括:
释放未被所述父对象持有的所述子对象。


4.根据权利要求1至3中任一项所述的内存泄漏的检测方法,其特征在于,
所述编程语言为Object-c语言。


5.一种内存泄漏的检测装置,其特征在于,包括:存储器和处理器,所述存储器存储有计算机程序,所述处理器执行计算机程序时执行:
识别编程语言创建的子对象的生命周期;
根据所述生命周期确定所述子对象的检测周期;
根据所述检测周期,检测所述生命周期内所述子对象是否被所述子对象对应的父对象持有;
检测到所述子对象未被所述父对象持有,生成并...

【专利技术属性】
技术研发人员:贾朝阳罗鹏罗英群吕令广
申请(专利权)人:深圳中兴网信科技有限公司
类型:发明
国别省市:广东;44

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

1