CN111324534A - 内存泄漏的检测方法、装置、终端和计算机可读存储介质 - Google Patents
内存泄漏的检测方法、装置、终端和计算机可读存储介质 Download PDFInfo
- Publication number
- CN111324534A CN111324534A CN202010099699.7A CN202010099699A CN111324534A CN 111324534 A CN111324534 A CN 111324534A CN 202010099699 A CN202010099699 A CN 202010099699A CN 111324534 A CN111324534 A CN 111324534A
- Authority
- CN
- China
- Prior art keywords
- memory
- child object
- child
- detecting
- life cycle
- 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.)
- Pending
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 85
- 238000000034 method Methods 0.000 claims abstract description 36
- 238000004590 computer program Methods 0.000 claims description 18
- 230000006870 function Effects 0.000 description 17
- 230000008569 process Effects 0.000 description 5
- 230000006378 damage Effects 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 230000000737 periodic effect Effects 0.000 description 4
- 238000010586 diagram Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
Abstract
本发明提出了一种内存泄漏的检测方法、装置、终端和计算机可读存储介质。其中,内存泄漏的检测方法包括:识别编程语言创建的子对象的生命周期;根据生命周期确定子对象的检测周期;根据检测周期,检测生命周期内子对象是否被子对象对应的父对象持有;检测到子对象未被父对象持有,生成并发送泄漏报告。本发明的检测方法利用子对象与父对象之间的关系,快速检查出用代码检查方法不能查出的内存泄漏问题,提高内存泄漏检测的效率和准确度,并且通过发送泄漏报告至控制台,即使在release版本中也可以将泄漏信息写入日志中,使得供开发人员能够快速定位到发生内存泄漏的对象,从而及时进行调试,确保系统正常运行。
Description
技术领域
本发明涉及内存检测技术领域,具体而言,涉及一种内存泄漏的检测方法、一种内存泄漏的检测装置、一种终端和一种计算机可读存储介质。
背景技术
苹果系统(IOS)中采用引用计数技术来管理内存,当一个对象没有任何一个地方引用时候,即对象保留数(Retain Count)为0,就会通过自动释放池(Autorelease pool)自动释放。但是,当对象多次引用,或者自动释放池释放不及等原因,引用计数不是很准确,难免会造成内存泄漏。现有IOS开发中的内存检查,主要是用开发工具X Code中提供的Analyze或者Instruments这两个工具。Analyze是检测代码,从代码结构的逻辑中发现可能的内存泄漏,只能找出代码逻辑简单的内存泄漏,如果代码风格严谨,则用处不大;Instruments是运行后,从对象实际内存持有情况,判断内存泄漏存在地方,要调试运行时才能使用,定位比较麻烦,操作也比较复杂,而且,两种方法都不能跟踪释放版本(release版本)中的内存泄漏。
发明内容
本发明旨在至少解决现有技术或相关技术中存在的技术问题之一。
为此,本发明第一方面在于提出了一种内存泄漏的检测方法。
本发明的第二方面在于提出了一种内存泄漏的检测装置。
本发明的第三方面在于提出了一种终端。
本发明的第四方面在于提出了一种计算机可读存储介质。
有鉴于此,根据本发明的第一方面,提出了一种内存泄漏的检测方法,包括:识别编程语言创建的子对象的生命周期;根据生命周期确定子对象的检测周期;根据检测周期,检测生命周期内子对象是否被子对象对应的父对象持有;检测到子对象未被父对象持有,生成并发送泄漏报告。
本发明提供的内存泄漏的检测方法,适用于开发人员编程过程中会创建包括子对象和父对象的对象层次结构,其中,子对象设置一个检测子对象与父对象之间连接关系的函数和一个生命周期情况返回函数,定义为生命周期代理(Link Delegate),识别子对象的生命周期,根据生命周期确定子对象的检测周期,例如,在生命周期内执行3次检测,根据检测周期生成检测指令,以触发子对象自发检测生命周期内该子对象是否被父对象持有,若检测到子对象没有被任何父对象持有,说明在子对象的生命周期内子对象与父对象解除关系,且未释放空间,则确定发生内存泄漏,此时,生成并发送泄漏报告,从而利用子对象与父对象之间的关系,快速检查出用代码检查方法不能查出的内存泄漏问题,实现自动检测内存泄漏功能,提高内存泄漏检测的效率和准确度,并且通过发送泄漏报告至控制台,即使在release版本中也可以将泄漏信息写入日志中,使得供开发人员能够快速定位到发生内存泄漏的对象,从而及时进行调试,确保系统正常运行。
当然,不仅可以根据生命周期自动进行周期性检测,还可以人工进行触发子对象检测,以免消耗过多的性能。
另外,根据本发明提供的上述技术方案中的内存泄漏的检测方法,还可以具有如下附加技术特征:
在上述技术方案中,进一步地,生成泄漏报告的步骤,具体包括:采集内存泄漏的子对象的现场信息;根据现场信息分析子对象的调用栈信息;根据现场信息和调用栈信息,生成泄漏报告。
在该技术方案中,采集内存泄漏的子对象的现场信息,以通过现场信息反映子对象的位置,并根据现场信息分析子对象的调用栈信息,即与父对象的调用关系,从而反映出代码逻辑,根据现场信息和调用栈信息,生成泄漏报告,使得供开发人员根据泄漏报告能够快速定位到发生内存泄漏的对象,并分析泄漏原因,从而及时进行调试,确保系统正常运行。其中,现场信息包括代码名称、运行信息等。
在上述任一技术方案中,进一步地,还包括:释放未被父对象持有的子对象。
在该技术方案中,在确认对象发生内存泄漏的情况下,释放未被父对象持有的子对象,从而及时阻止内存继续泄漏,进而避免系统运行速度缓慢等问题,保证系统能够正常运行。
在上述任一技术方案中,进一步地,编程语言为Object-c语言。
在该技术方案中,IOS开发用的Object-c语言(OC语言)是一种面向对象的编程语言,每个对象都有生命周期,即对象从创建到销毁的运行过程的生命,具体包括对象的初始化、引用、释放,OC语言中的对象可以遵从一种或者多种协议代理(Delegate),利用代理可以一对一的把对象的信息传递给代理实现者。从而利用OC语言机制,在创建对象时,设置生命周期代理,让所有创建的对象都遵从生命周期代理,从而在子对象的生命周期内子对象未被父对象持有时,发出泄漏报告,从而检测出发生内存泄漏,提高内存泄漏检测的效率和准确度。
根据本发明的第二方面,提出了一种内存泄漏的检测装置,包括存储器、处理器,存储器储存有计算机程序,处理器执行计算机程序时执行:识别编程语言创建的子对象的生命周期;根据生命周期确定子对象的检测周期;根据检测周期,检测生命周期内子对象是否被子对象对应的父对象持有;检测到子对象未被父对象持有,生成并发送泄漏报告。
本发明提供的内存泄漏的检测装置,适用于开发人员编程过程中会创建包括子对象和父对象的对象层次结构,其中,子对象设置一个检测子对象与父对象之间连接关系的函数和一个生命周期情况返回函数,定义为生命周期代理(Link Delegate),识别子对象的生命周期,根据生命周期确定子对象的检测周期,例如,在生命周期内执行3次检测,根据检测周期生成检测指令,以触发子对象自发检测生命周期内该子对象是否被父对象持有,若检测到子对象没有被任何父对象持有,说明在子对象的生命周期内子对象与父对象解除关系,且未释放空间,则确定发生内存泄漏,此时,生成并发送泄漏报告,从而利用子对象与父对象之间的关系,快速检查出用代码检查方法不能查出的内存泄漏问题,实现自动检测内存泄漏功能,提高内存泄漏检测的效率和准确度,并且通过发送泄漏报告至控制台,即使在release版本中也可以将泄漏信息写入日志中,使得供开发人员能够快速定位到发生内存泄漏的对象,从而及时进行调试,确保系统正常运行。
当然,不仅可以根据生命周期自动进行周期性检测,还可以人工进行触发子对象检测,以免消耗过多的性能。
在上述任一技术方案中,进一步地,处理器执行计算机程序时具体执行生成泄漏报告的步骤,具体包括:采集内存泄漏的子对象的现场信息;根据现场信息分析子对象的调用栈信息;根据现场信息和调用栈信息,生成泄漏报告。
在该技术方案中,采集内存泄漏的子对象的现场信息,以通过现场信息反映子对象的位置,并根据现场信息分析子对象的调用栈信息,即与父对象的调用关系,从而反映出代码逻辑,根据现场信息和调用栈信息,生成泄漏报告,使得供开发人员根据泄漏报告能够快速定位到发生内存泄漏的对象,并分析泄漏原因,从而及时进行调试,确保系统正常运行。其中,现场信息包括代码名称、运行信息等。
在上述任一技术方案中,进一步地,处理器执行计算机程序时具体还会执行:释放未被父对象持有的子对象。
在该技术方案中,在确认对象发生内存泄漏的情况下,释放未被父对象持有的子对象,从而及时阻止内存继续泄漏,进而避免系统运行速度缓慢等问题,保证系统能够正常运行。
在上述任一技术方案中,进一步地,编程语言为Object-c语言。
在该技术方案中,IOS开发用的Object-c语言(OC语言)是一种面向对象的编程语言,每个对象都有生命周期,即对象从创建到销毁的运行过程的生命,具体包括对象的初始化、引用、释放,OC语言中的对象可以遵从一种或者多种协议代理(Delegate),利用代理可以一对一的把对象的信息传递给代理实现者。从而利用OC语言机制,在创建对象时,设置生命周期代理,让所有创建的对象都遵从生命周期代理,从而在子对象的生命周期内子对象未被父对象持有时,发出警报信息,从而检测出发生内存泄漏,提高内存泄漏检测的效率和准确度。
根据本发明的第三方面,提出了一种终端,包括:上述任一项的内存泄漏的检测装置,检测装置执行计算机程序时执行以下步骤:识别编程语言创建的子对象的生命周期;根据生命周期确定子对象的检测周期;根据检测周期,检测生命周期内子对象是否被子对象对应的父对象持有;检测到子对象未被父对象持有,生成并发送泄漏报告。
本发明提供的终端,能够识别子对象的生命周期,根据生命周期确定子对象的检测周期,例如,在生命周期内执行3次检测,根据检测周期生成检测指令,以触发子对象自发检测生命周期内该子对象是否被父对象持有,若检测到子对象没有被任何父对象持有,说明在子对象的生命周期内子对象与父对象解除关系,且未释放空间,则确定发生内存泄漏,此时,生成并发送泄漏报告,从而利用子对象与父对象之间的关系,快速检查出用代码检查方法不能查出的内存泄漏问题,实现自动检测内存泄漏功能,提高内存泄漏检测的效率和准确度,并且通过发送泄漏报告至控制台,即使在release版本中也可以将泄漏信息写入日志中,使得供开发人员能够快速定位到发生内存泄漏的对象,从而及时进行调试,确保系统正常运行。
具体地,终端包括但不限于以下至少一种:计算机、手机、平板电脑。
根据本发明的第四方面,提出了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如上述任一项的内存泄漏的检测方法的步骤。因此该计算机可读存储介质具备上述任一项的内存泄漏的检测方法的全部有益效果。
本发明的附加方面和优点将在下面的描述部分中变得明显,或通过本发明的实践了解到。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1示出了本发明一个实施例的内存泄漏的检测方法流程示意图;
图2示出了本发明又一个实施例的内存泄漏的检测方法流程示意图;
图3示出了本发明又一个实施例的内存泄漏的检测方法流程示意图;
图4示出了本发明一个具体实施例的内存泄漏的检测方法示意框图;
图5示出了本发明一个实施例的内存泄漏的检测装置示意框图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不限于下面公开的具体实施例的限制。
下面参照图1至图5描述根据本发明一些实施例的内存泄漏的检测方法和内存泄漏的检测装置600。
实施例一
如图1所示,根据本发明第一方面的实施例,提出了一种内存泄漏的检测方法,该方法包括:
步骤102,识别子对象的生命周期;
步骤104,根据生命周期确定子对象的检测周期;
步骤106,根据检测周期,检测生命周期内子对象是否被子对象对应的父对象持有;
步骤108,检测到子对象未被父对象持有,生成并发送泄漏报告。
在该实施例中,适用于开发人员编程过程中会创建包括子对象和父对象的对象层次结构,其中,子对象设置一个检测子对象与父对象之间连接关系的函数和一个生命周期情况返回函数,定义为生命周期代理(Link Delegate),识别子对象的生命周期,根据生命周期确定子对象的检测周期,例如,在生命周期内执行3次检测,根据检测周期生成检测指令,以触发子对象自发检测生命周期内该子对象是否被父对象持有,若检测到子对象没有被任何父对象持有,说明在子对象的生命周期内子对象与父对象解除关系,且未释放空间,则确定发生内存泄漏,此时,生成并发送泄漏报告,从而利用子对象与父对象之间的关系,快速检查出用代码检查方法不能查出的内存泄漏问题,提高内存泄漏检测的效率和准确度,并且通过发送泄漏报告至控制台,即使在release版本中也可以将泄漏信息写入日志中,使得供开发人员能够快速定位到发生内存泄漏的对象,从而及时进行调试,确保系统正常运行。
具体地,编程语言为Object-c语言,IOS开发用的Object-c语言(OC语言)是一种面向对象的编程语言,每个对象都有生命周期,即对象从创建到销毁的运行过程的生命,具体包括对象的初始化、引用、释放,OC语言中的对象可以遵从一种或者多种协议代理(Delegate),利用代理可以一对一的把对象的信息传递给代理实现者。从而利用OC语言机制,在创建对象时,设置生命周期代理,让所有创建的对象都遵从生命周期代理,从而在子对象的生命周期内子对象未被父对象持有时,发出警报信息,从而检测出发生内存泄漏,提高内存泄漏检测的效率和准确度。
另外,不仅可以根据生命周期自动进行周期性检测,还可以人工进行触发子对象检测,以免消耗过多的性能。
实施例二
如图2所示,根据本发明的一个实施例,提出了一种内存泄漏的检测方法,该方法包括:
步骤202,识别子对象的生命周期;
步骤204,根据生命周期确定子对象的检测周期;
步骤206,根据检测周期,检测生命周期内子对象是否被子对象对应的父对象持有;
步骤208,检测到子对象未被父对象持有,采集内存泄漏的子对象的现场信息;
步骤210,根据现场信息分析子对象的调用栈信息;
步骤212,根据现场信息和调用栈信息,生成并输出泄漏报告。
在该实施例中,采集内存泄漏的子对象的现场信息,以通过现场信息反映子对象的位置,并根据现场信息分析子对象的调用栈信息,即与父对象的调用关系,从而反映出代码逻辑,根据现场信息和调用栈信息,生成泄漏报告,使得供开发人员根据泄漏报告能够快速定位到发生内存泄漏的对象,并分析泄漏原因,从而及时进行调试,确保系统正常运行。其中,现场信息包括代码名称、运行信息等。
实施例三
如图3所示,根据本发明的一个实施例,提出了一种内存泄漏的检测方法,该方法包括:
步骤302,识别子对象的生命周期;
步骤304,根据生命周期确定子对象的检测周期;
步骤306,根据检测周期,检测生命周期内子对象是否被子对象对应的父对象持有;
步骤308,检测到子对象未被父对象持有,生成并发送泄漏报告;
步骤310,释放未被父对象持有的子对象。
在该实施例中,通过检测子对象的生命周期内子对象是否被子对象对应的父对象持有,判断是否发生内存泄漏,在确认对象发生内存泄漏的情况下,释放未被父对象持有的子对象,从而及时阻止内存继续泄漏,进而避免系统运行速度缓慢等问题,保证系统能够正常运行。
实施例四
根据本发明的一个具体实施例,提出了一种内存泄漏的检测方法。
创建一个生命周期代理,取名为Link Delegate,在代理中创建一个Link CheckCall Back(链路检测回拨)函数,用于返回对象当前信息。
当子对象初始化时,为子对象添加一个Link Check(内存泄漏自我检测函数),以判断是否被父对象持有,让子对象遵从Link Delegate协议,再给子对象加入一个LinkCheck Notification(链路通知监听)。
如图4所示,生命周期代理触发过程:当子对象对象收到Link CheckNotification通知时,触发自身的Link Check函数,开始自我检查,一旦发现它不属于某一个父对向且没有被销毁时,即子对象和父对象解除关系而未释放空间,确认发生内存泄漏,通过遵从的Link Delegate代理里的Link Check Call Back函数返回信息,开发者通过Link Check Call Back函数返回的信息能够快速定位到,发生内存泄漏的对象。在调试时将信息打印到控制台,在release版本中也可以将内存泄漏信息写入日志中,上传到服务器,供开发人员获取。这样可以快速检查出用代码检查方法不能查出的内存泄漏问题。
在该实施例中,通过添加Link Delegate协议,让所有OC对象都可以抛出内存异常的情况,甚至可以将泄漏的内存自己释放。在调试时将信息打印到控制台,在release版本中也可以将内存泄漏信息写入日志中,上传到服务器,供开发人员查阅,快速定位代码逻辑中的问题。此外,通过Link Check Notification,以广播的形式让所有对象触发自我检查。不需要实时检查,可以设置成周期性或者手动触发,以免消耗过多的性能。
实施例五
如图5所示,根据本发明第二方面的实施例,提出了一种内存泄漏的检测装置600,包括存储器602、处理器604及存储在存储器602上并可在处理器604上运行的计算机程序,处理器604执行计算机程序时执行:识别编程语言创建的子对象的生命周期;根据生命周期确定子对象的检测周期;根据检测周期,检测生命周期内子对象是否被子对象对应的父对象持有;检测到子对象未被父对象持有,生成并发送泄漏报告。
本实施例提供的内存泄漏的检测装置600,适用于开发人员编程过程中会创建包括子对象和父对象的对象层次结构,其中,子对象设置一个检测子对象与父对象之间连接关系的函数和一个生命周期情况返回函数,定义为生命周期代理(Link Delegate),识别子对象的生命周期,根据生命周期确定子对象的检测周期,根据检测周期生成检测指令,以触发子对象自发检测生命周期内该子对象是否被父对象持有,若检测到子对象没有被任何父对象持有,说明在子对象的生命周期内子对象与父对象解除关系,且未释放空间,则确定发生内存泄漏,此时,生成并发送泄漏报告,从而利用子对象与父对象之间的关系,快速检查出用代码检查方法不能查出的内存泄漏问题,提高内存泄漏检测的效率和准确度,并且通过发送泄漏报告至控制台,即使在release版本中也可以将泄漏信息写入日志中,使得供开发人员能够快速定位到发生内存泄漏的对象,从而及时进行调试,确保系统正常运行。
具体地,编程语言为Object-c语言,IOS开发用的Object-c语言(OC语言)是一种面向对象的编程语言,每个对象都有生命周期,即对象从创建到销毁的运行过程的生命,具体包括对象的初始化、引用、释放,OC语言中的对象可以遵从一种或者多种协议代理(Delegate),利用代理可以一对一的把对象的信息传递给代理实现者。从而利用OC语言机制,在创建对象时,设置生命周期代理,让所有创建的对象都遵从生命周期代理,从而在子对象的生命周期内子对象未被父对象持有时,发出警报信息,从而检测出发生内存泄漏,提高内存泄漏检测的效率和准确度。
进一步地,处理器604执行计算机程序时具体执行生成泄漏报告的步骤,具体包括:采集内存泄漏的子对象的现场信息;根据现场信息分析子对象的调用栈信息;根据现场信息和调用栈信息,生成泄漏报告,以通过现场信息反映子对象的位置,并根据现场信息分析子对象的调用栈信息,即与父对象的调用关系,从而反映出代码逻辑,根据现场信息和调用栈信息,生成泄漏报告,使得供开发人员根据泄漏报告能够快速定位到发生内存泄漏的对象,并分析泄漏原因,从而及时进行调试,确保系统正常运行。其中,现场信息包括代码名称、运行信息等。
另外,在确认对象发生内存泄漏的情况下,释放子对象,从而及时阻止内存继续泄漏,进而避免系统运行速度缓慢等问题,保证系统能够正常运行。
实施例六
根据本发明第三方面的实施例,提出了一种终端,包括上述第二方面实施例提出的内存泄漏的检测装置,检测装置执行计算机程序时执行以下步骤:识别编程语言创建的子对象的生命周期;根据生命周期确定子对象的检测周期;根据检测周期,检测生命周期内子对象是否被子对象对应的父对象持有;检测到子对象未被父对象持有,生成并发送泄漏报告。
本实施例提供的终端,能够识别子对象的生命周期,根据生命周期确定子对象的检测周期,例如,在生命周期内执行3次检测,根据检测周期生成检测指令,以触发子对象自发检测生命周期内该子对象是否被父对象持有,若检测到子对象没有被任何父对象持有,说明在子对象的生命周期内子对象与父对象解除关系,且未释放空间,则确定发生内存泄漏,此时,生成并发送泄漏报告,从而利用子对象与父对象之间的关系,快速检查出用代码检查方法不能查出的内存泄漏问题,实现自动检测内存泄漏功能,提高内存泄漏检测的效率和准确度,并且通过发送泄漏报告至控制台,即使在release版本中也可以将泄漏信息写入日志中,使得供开发人员能够快速定位到发生内存泄漏的对象,从而及时进行调试,确保系统正常运行。
实施例七
根据本发明第四方面的实施例,提出了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现如上述任一项的内存泄漏的检测方法的步骤。因此该计算机可读存储介质具备上述任一项的内存泄漏的检测方法的全部有益效果。
在本说明书的描述中,术语“第一”、“第二”仅用于描述的目的,而不能理解为指示或暗示相对重要性,除非另有明确的规定和限定;术语“连接”、“安装”、“固定”等均应做广义理解,例如,“连接”可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
在本说明书的描述中,术语“一个实施例”、“一些实施例”、“具体实施例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或实例。而且,描述的具体特征、结构、材料或特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种内存泄漏的检测方法,其特征在于,包括:
识别编程语言创建的子对象的生命周期;
根据所述生命周期确定所述子对象的检测周期;
根据所述检测周期,检测所述生命周期内所述子对象是否被所述子对象对应的父对象持有;
检测到所述子对象未被所述父对象持有,生成并发送泄漏报告。
2.根据权利要求1所述的内存泄漏的检测方法,其特征在于,所述生成泄漏报告的步骤,具体包括:
采集内存泄漏的所述子对象的现场信息;
根据所述现场信息分析所述子对象的调用栈信息;
根据所述现场信息和所述调用栈信息,生成所述泄漏报告。
3.根据权利要求1所述的内存泄漏的检测方法,其特征在于,还包括:
释放未被所述父对象持有的所述子对象。
4.根据权利要求1至3中任一项所述的内存泄漏的检测方法,其特征在于,
所述编程语言为Object-c语言。
5.一种内存泄漏的检测装置,其特征在于,包括:存储器和处理器,所述存储器存储有计算机程序,所述处理器执行计算机程序时执行:
识别编程语言创建的子对象的生命周期;
根据所述生命周期确定所述子对象的检测周期;
根据所述检测周期,检测所述生命周期内所述子对象是否被所述子对象对应的父对象持有;
检测到所述子对象未被所述父对象持有,生成并发送泄漏报告。
6.根据权利要求5所述的内存泄漏的检测装置,其特征在于,所述处理器执行所述计算机程序时具体执行所述生成泄漏报告的步骤,具体包括:
采集内存泄漏的所述子对象的现场信息;
根据所述现场信息分析所述子对象的调用栈信息;
根据所述现场信息和所述调用栈信息,生成所述泄漏报告。
7.根据权利要求5所述的内存泄漏的检测装置,其特征在于,所述处理器执行所述计算机程序时具体还会执行:
释放未被所述父对象持有的所述子对象。
8.根据权利要求5至7中任一项所述的内存泄漏的检测装置,其特征在于,
所述编程语言为Object-c语言。
9.一种终端,其特征在于,包括:
如权利要求5至8中任一项所述的内存泄漏的检测装置,所述检测装置执行所述计算机程序时执行以下步骤:
识别编程语言创建的子对象的生命周期;
根据所述生命周期确定所述子对象的检测周期;
根据所述检测周期,检测所述生命周期内所述子对象是否被所述子对象对应的父对象持有;
检测到所述子对象未被所述父对象持有,生成并发送泄漏报告。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时执行如权利要求1至4中任一项所述的内存泄漏的检测方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010099699.7A CN111324534A (zh) | 2020-02-18 | 2020-02-18 | 内存泄漏的检测方法、装置、终端和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010099699.7A CN111324534A (zh) | 2020-02-18 | 2020-02-18 | 内存泄漏的检测方法、装置、终端和计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111324534A true CN111324534A (zh) | 2020-06-23 |
Family
ID=71172781
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010099699.7A Pending CN111324534A (zh) | 2020-02-18 | 2020-02-18 | 内存泄漏的检测方法、装置、终端和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111324534A (zh) |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7313661B1 (en) * | 2005-03-18 | 2007-12-25 | Sun Microsystems, Inc. | Tool for identifying causes of memory leaks |
CN103064784A (zh) * | 2012-11-29 | 2013-04-24 | 福建师范大学 | 面向Xen环境的运行时内存泄漏检测方法及其实现系统 |
CN107632929A (zh) * | 2017-08-21 | 2018-01-26 | 北京京东尚科信息技术有限公司 | 一种检测内存泄漏的方法和装置 |
CN107908539A (zh) * | 2017-07-24 | 2018-04-13 | 平安科技(深圳)有限公司 | 一种检测应用程序内存泄露的方法、终端及计算机可读存储介质 |
CN107957941A (zh) * | 2016-10-17 | 2018-04-24 | 腾讯科技(深圳)有限公司 | 移动终端内存泄漏处理方法和装置 |
-
2020
- 2020-02-18 CN CN202010099699.7A patent/CN111324534A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7313661B1 (en) * | 2005-03-18 | 2007-12-25 | Sun Microsystems, Inc. | Tool for identifying causes of memory leaks |
CN103064784A (zh) * | 2012-11-29 | 2013-04-24 | 福建师范大学 | 面向Xen环境的运行时内存泄漏检测方法及其实现系统 |
CN107957941A (zh) * | 2016-10-17 | 2018-04-24 | 腾讯科技(深圳)有限公司 | 移动终端内存泄漏处理方法和装置 |
CN107908539A (zh) * | 2017-07-24 | 2018-04-13 | 平安科技(深圳)有限公司 | 一种检测应用程序内存泄露的方法、终端及计算机可读存储介质 |
CN107632929A (zh) * | 2017-08-21 | 2018-01-26 | 北京京东尚科信息技术有限公司 | 一种检测内存泄漏的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Guo et al. | Characterizing and detecting resource leaks in Android applications | |
Raza et al. | Bauhaus–a tool suite for program analysis and reverse engineering | |
US7313661B1 (en) | Tool for identifying causes of memory leaks | |
Briand et al. | Automating impact analysis and regression test selection based on UML designs | |
US9015671B2 (en) | Integrating program construction | |
US7058927B2 (en) | Computer software run-time analysis systems and methods | |
US7861226B1 (en) | Constraint solver to code based test data generation for improving software reliability and security | |
CN101295268B (zh) | 面向软件系统的分区存储器转储方法和装置 | |
EP0403415A2 (en) | System and method for detecting and diagnosing errors in a computer program | |
US20040220774A1 (en) | Early warning mechanism for enhancing enterprise availability | |
US20080276228A1 (en) | System and method for static analysis using fault paths | |
US8806462B2 (en) | Identifying code that wastes time switching tasks | |
CN111427780A (zh) | 函数信息的追踪方法、装置和计算机可读存储介质 | |
EP2011004A2 (en) | Method and system for providing a visual debugger for an interpreted statistical language | |
US8739145B2 (en) | Super nested block method to minimize coverage testing overhead | |
US20060085156A1 (en) | Method and system for predicting memory leaks from unit testing | |
Alimadadi et al. | Finding broken promises in asynchronous JavaScript programs | |
US20080005742A1 (en) | Method and apparatus for detecting lock acquisition hierarchy violations and unsafe lock releases | |
US20090249285A1 (en) | Automatic Generation of Run-Time Instrumenter | |
Cleland-Huang et al. | Dynamically tracing non-functional requirements through design pattern invariants | |
CN114866300A (zh) | 一种基于重放分析的网络协议软件状态变量识别方法 | |
CN113971031A (zh) | 软件包依赖关系检查方法及装置 | |
CN111324534A (zh) | 内存泄漏的检测方法、装置、终端和计算机可读存储介质 | |
Mos et al. | COMPAS: Adaptive performance monitoring of component-based systems | |
CN116107794A (zh) | 一种舰船软件故障自动诊断方法、系统及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20200623 |
|
WD01 | Invention patent application deemed withdrawn after publication |