CN111638990A - 内存泄露的处理方法、装置及存储介质 - Google Patents

内存泄露的处理方法、装置及存储介质 Download PDF

Info

Publication number
CN111638990A
CN111638990A CN202010500067.7A CN202010500067A CN111638990A CN 111638990 A CN111638990 A CN 111638990A CN 202010500067 A CN202010500067 A CN 202010500067A CN 111638990 A CN111638990 A CN 111638990A
Authority
CN
China
Prior art keywords
detection
memory leak
objects
detection result
server
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
CN202010500067.7A
Other languages
English (en)
Other versions
CN111638990B (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.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network 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 Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202010500067.7A priority Critical patent/CN111638990B/zh
Publication of CN111638990A publication Critical patent/CN111638990A/zh
Application granted granted Critical
Publication of CN111638990B publication Critical patent/CN111638990B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/073Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment in a memory management context, e.g. virtual memory or cache management
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本申请提供了一种内存泄露的处理方法、装置及存储介质,该方法包括:服务器获取目标游戏的检测脚本,根据检测脚本,对目标游戏的程序文件进行内存泄露检测,得到检测结果,将检测结果发送给终端设备,终端设备根据检测结果,从第一对象和至少一个第二对象中,确定待解除引用关系的一组对象,并解除目标游戏程序文件中该两个对象之间的引用关系。本方案采用检测脚本对程序文件进行内存泄露检测,得到检测结果,根据检测结果解除程序文件中至少一组对象之间的引用关系,实现了对程序文件的修改,提高了内存泄露的处理效率和准确度,同时节省了人力成本。

Description

内存泄露的处理方法、装置及存储介质
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种内存泄露的处理方法、装置及存储介质。
背景技术
在游戏开发过程中,开发人员编写的程序文件常常会存在内存泄露的问题,当游戏上线后,会出现由于内存泄露而导致游戏进程停止运行的现象。其中,内存泄漏(MemoryLeak)指的是程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
现有技术中,通常通过压力测试来检测是否存在内存泄露,具体地,采用大量的模拟客户端来登录游戏、玩游戏以及退出登录游戏,来观测系统内存的增长情况,若系统内存持续增长,则确定该游戏的程序文件存在内存泄露的问题,然后需要人工排查该程序文件存在内存泄露的原因,从而开发人员可以对该程序文件进行修改,以解决内存泄露的问题。
然而,采用压力测试的方式实施起来比较繁琐、实施流程较长,并且人工排查内存泄露的效率较低。
发明内容
有鉴于此,本申请的目的在于提供一种内存泄露的处理方法、装置及存储介质,以解决现有技术中处理内存泄露时效率较低、准确度不高的问题。
第一方面,本申请提供一种内存泄露的处理方法,应用于服务器,包括:
获取目标游戏的检测脚本,所述检测脚本是根据内存泄露的影响因素确定的;
根据所述检测脚本,对所述目标游戏的程序文件进行内存泄露检测,得到检测结果,所述检测结果用于表示存在内存泄露的第一对象以及引用所述第一对象的至少一个第二对象之间的引用关系;
将所述检测结果发送给终端设备,所述终端设备用于根据所述检测结果,解除所述程序文件中一组对象之间的引用关系。
在一些实施例中,所述内存泄露的影响因素包括以下中的至少一个:
生命周期小于预设值的对象被生命周期大于所述预设值的对象引用;
循环引用中的任一对象定义了销毁操作;
存在循环引用且垃圾回收功能关闭。
在一些实施例中,所述根据所述检测脚本,对所述目标游戏的程序文件进行内存泄露检测,得到检测结果之前,还包括:
向与所述服务器连接的测试终端发送第一请求,所述第一请求用于请求断开与所述服务器之间的网络连接。
在一些实施例中,所述根据所述检测脚本,对所述目标游戏的程序文件进行内存泄露检测,得到检测结果,包括:
获取所述程序文件对应的至少一个未释放对象,并从所述至少一个未释放对象中确定所述第一对象;
通过运行所述检测脚本,对所述程序文件进行内存泄露检测,确定所述至少一个第二对象,以及所述第一对象与所述至少一个第二对象之间的引用关系;
根据所述引用关系,绘制得到所述第一对象和所述至少一个第二对象的引用关系图,所述检测结果为所述引用关系图。
在一些实施例中,所述向与所述服务器连接的测试终端发送第一请求,包括:
根据接收到的第二请求,向与所述服务器连接的测试终端发送第一请求,所述第二请求用于请求所述服务器对所述程序文件进行内存泄露检测。
在一些实施例中,所述第一对象以及引用所述第一对象的至少一个第二对象之间的引用关系包括以下中的至少一种:
直接引用、间接引用、循环引用。
第二方面,本申请提供一种内存泄露的处理方法,应用于终端设备,包括:
接收服务器发送的检测结果,所述检测结果是所述服务器根据检测脚本对目标游戏的程序文件进行内存泄露检测得到的,所述检测脚本是根据内存泄露的影响因素确定的;
根据所述检测结果,从所述第一对象和所述至少一个第二对象中,确定待解除引用关系的一组对象,每组对象中包括两个对象;
解除目标游戏的程序文件中所述两个对象之间的引用关系。
在一些实施例中,所述确定待解除引用关系的一组对象,每组对象中包括两个对象,包括:
根据预先定义的所述两个对象的标识,确定待解除引用关系的一组对象。
第三方面,本申请提供一种内存泄露的处理装置,包括:
获取模块,用于获取目标游戏的检测脚本,所述检测脚本是根据内存泄露的影响因素确定的;
处理模块,用于根据所述检测脚本,对所述目标游戏的程序文件进行内存泄露检测,得到检测结果,所述检测结果用于表示存在内存泄露的第一对象以及引用所述第一对象的至少一个第二对象之间的引用关系;
发送模块,用于将所述检测结果发送给终端设备,所述终端设备用于根据所述引用关系图,解除所述程序文件中一组对象之间的引用关系。
在一些实施例中,所述内存泄露的影响因素包括以下中的至少一个:
生命周期小于预设值的对象被生命周期大于所述预设值的对象引用;
循环引用中的任一对象定义了销毁操作;
存在循环引用且垃圾回收功能关闭。
在一些实施例中,所述发送模块还用于:
向与所述服务器连接的测试终端发送第一请求,所述第一请求用于请求所述测试终端断开与所述服务器之间的网络连接。
在一些实施例中,所述处理模块具体用于:
获取所述程序文件对应的至少一个未释放对象,并从所述至少一个未释放对象中确定所述第一对象;
通过运行所述检测脚本,对所述程序文件进行内存泄露检测,确定所述至少一个第二对象,以及所述第一对象与所述至少一个第二对象之间的引用关系;
根据所述引用关系,绘制得到所述第一对象和所述至少一个第二对象的引用关系图,所述检测结果为所述引用关系图。
在一些实施例中,所述发送模块,具体用于:
根据接收到的第二请求,向与所述服务器连接的测试终端发送第一请求,所述第二请求用于请求所述服务器对所述程序文件进行内存泄露检测。
在一些实施例中,所述第一对象以及引用所述第一对象的至少一个第二对象之间的引用关系包括以下中的至少一种:
直接引用、间接引用、循环引用。
第四方面,本申请提供一种内存泄露的处理装置,包括:
接收模块,用于接收服务器发送的检测结果,所述检测结果是所述服务器根据检测脚本对目标游戏的程序文件进行内存泄露检测得到的,所述检测脚本是根据内存泄露的影响因素确定的;
处理模块,用于根据所述检测结果,从所述第一对象和所述至少一个第二对象中,确定待解除引用关系的一组对象,每组对象中包括两个对象;
解除目标游戏的程序文件中所述两个对象之间的引用关系。
在一些实施例中,所述处理模块,具体用于:
根据预先定义的所述两个对象的标识,确定待解除引用关系的一组对象。
第五方面,本申请提供一种服务器,包括:
处理器、存储器、发送器、接收器和总线,所述存储器中存储有所述处理器可执行的机器可读指令,当服务器运行时,所述处理器与所述存储器之间通过总线通信,所述处理器执行所述机器可读指令,以执行第一方面所述方法的步骤。
第六方面,本申请提供一种终端设备,包括:
处理器、存储器、发送器、接收器和总线,所述存储器中存储有所述处理器可执行的机器可读指令,当终端设备运行时,所述处理器与所述存储器之间通过总线通信,所述处理器执行所述机器可读指令,以执行第二方面所述方法的步骤。
第七方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如第一方面、第二方面任一所述方法的步骤。
本实施例提供的内存泄露的处理方法、装置及存储介质,该方法包括:服务器获取目标游戏的检测脚本,根据检测脚本,对目标游戏的程序文件进行内存泄露检测,得到检测结果,将检测结果发送给终端设备,终端设备根据检测结果,从第一对象和至少一个第二对象中,确定待解除引用关系的一组对象,并解除目标游戏程序文件中该两个对象之间的引用关系。本方案采用检测脚本对程序文件进行内存泄露检测,得到检测结果,根据检测结果解除程序文件中至少一组对象之间的引用关系,实现了对程序文件的修改,提高了内存泄露的处理效率和准确度,同时节省了人力成本。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1示出了本申请实施例提供的一种内存泄露的处理系统的架构示意图;
图2示出了本申请实施例提供的一种内存泄露的处理方法的流程图;
图3示出了本申请实施例提供的一种引用关系图的示意图;
图4示出了本申请实施例提供另一种的内存泄露的处理方法的流程图;
图5示出了本申请实施例提供的一种内存泄露的处理装置的结构示意图;
图6示出了本申请实施例提供的另一种内存泄露的处理装置的结构示意图;
图7示出了本申请实施例提供的一种服务器的结构示意图;
图8示出了本申请实施例提供的一种终端设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解,本申请中附图仅起到说明和描述的目的,并不用于限定本申请的保护范围。另外,应当理解,示意性的附图并未按实物比例绘制。本申请中使用的流程图示出了根据本申请的一些实施例实现的操作。应该理解,流程图的操作可以不按顺序实现,没有逻辑的上下文关系的步骤可以反转顺序或者同时实施。此外,本领域技术人员在本申请内容的指引下,可以向流程图添加一个或多个其他操作,也可以从流程图中移除一个或多个操作。
另外,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本申请实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本申请的实施例的详细描述并非旨在限制要求保护的本申请的范围,而是仅仅表示本申请的选定实施例。基于本申请的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请实施例中将会用到术语“包括”,用于指出其后所声明的特征的存在,但并不排除增加其它的特征。
在游戏开发过程中,开发人员编写的游戏的程序文件常常会存在内存泄露的问题,当游戏上线后,可能出现由于程序文件中内存泄露的问题导致游戏进程停止运行的现象,基于此,现有技术通过压力测试并采用人工排查的方式来定位程序文件中内存泄露的原因,并适应修改程序文件,这样,当游戏上线后,避免由于程序文件中内存泄露的原因导致游戏进程停止运行,以提高用户体验。然而,通过人工排查的方式效率较低、准确度不高,还增加了人力成本。
基于此,本申请实施例通过检测脚本对程序文件进行内存泄露检测,得到检测结果,根据检测结果解除程序文件中至少一组对象之间的引用关系,从而实现了对程序文件的修改,提高了内存泄露的处理效率和准确度,同时节省了人力成本。
图1示出了本申请实施例提供的一种内存泄露的处理系统的架构示意图,如图1所示,内存泄露的处理系统包括服务器101和终端设备102,其中,服务器101可以为目标游戏对应的游戏服务器。
在游戏开发阶段,服务器101获取目标游戏的检测脚本后,可以定时根据该检测脚本对目标游戏的程序文件进行内存泄露检测,然后将得到的检测结果发送给终端设备102,由终端设备102根据该检测结果解除程序文件中至少一组对象之间的引用关系。
示例性地,该内存泄露的处理系统还可以包括网页服务器103,开发人员通过网页服务器103可以向服务器101发送操作指令等。在一种应用场景中,网页服务器103可以向服务器101发送用于内存泄露检测的请求,以便服务器101根据该请求进行内存泄露检测。在服务器101进行内存泄漏检测后,还可以向网页服务器103发送指示已进行内存泄漏检测的响应。
示例性地,该内存泄露的处理系统还可以包括测试终端104,测试终端104的数量包括但不限于一个。通常在游戏开发阶段,开发人员还需要通过测试终端104对游戏的性能进行测试和验证等,为了避免将不存在内存泄露的对象误判为存在内存泄露的对象,需要中断服务器101与测试终端104之间的网络连接。
下面结合上述图1示出的内存泄露的处理系统中描述的内容,对本申请实施例提供的内存泄露的处理方法进行详细说明。
图2示出了本申请实施例提供的一种内存泄露的处理方法的流程图,如图2所示,该内存泄露的处理方法包括如下步骤:
S101、服务器获取目标游戏的检测脚本。
其中,目标游戏可以为任意一款游戏,本实施例对此不作限定。为避免目标游戏上线后,其程序文件也即代码文件,由于内存泄露而导致游戏进程停止运行,在游戏开发阶段,可以对目标游戏的程序文件进行内存泄露检测,并修改程序文件。示例性地,程序文件可以为采用任一编程语言得到的文件,如Python文件。
因此,在本实施例中,服务器获取目标游戏的检测脚本,检测脚本是根据内存泄露的影响因素确定的,该检测脚本用于对程序文件进行内存泄露检测。内存泄露的影响因素包括至少一个影响因素,其例如可以为以下中的至少一个:
生命周期小于预设值的对象被生命周期大于预设值的对象引用;
循环引用中的任一对象定义了销毁操作;
存在循环引用且垃圾回收功能关闭。
其中,在Globals作用域的对象中,可能存在生命周期小于预设值的对象被生命周期大于预设值的对象引用,预设值可以根据实际情况确定,本实施例对此不作限制。
循环引用例如可以为A直接或者间接引用B,且B直接或者间接引用A,则A、B存在循环引用。当循环引用中的任一对象,即A或B,定义了销毁操作,即__del__,则导致A、B都不会被释放,即A、B均为存在内存泄露的对象。
在循环引用中,Python语言通常会使用内置的垃圾回收(Garbage Collection,GC)功能来解除循环引用、释放存在内存泄露的对象,但在某些情况下,例如,由于GC功能带来了卡顿等,可以手动关闭GC功能,一旦关闭GC功能,则循环引用中的对象就不会被释放,即存在内存泄露的对象。
需要指出的是,如上内存泄露的影响因素仅为一些可能的示例,本申请所涉及的内存泄露的影响因素,还可以为其它影响内存泄露的因素,本实施例不对此进行限制。
在本实施例中,开发人员可以根据内存泄露的影响因素编写得到检测脚本,并将该检测脚本保存至服务器,服务器即可获取目标游戏的检测脚本。也就是说,服务器可从预设的存储位置,获取预先设置的该目标游戏的检测脚本。
需要说明的是,不同游戏的检测脚本可以不同,也可以相同,若游戏的程序文件都是采用相同的编程语言得到的,如Python,则检测脚本可以相同,反之,不同游戏的检测脚本可以不同。
S102、服务器根据检测脚本,对目标游戏的程序文件进行内存泄露检测,得到检测结果。
在本实施例中,由于检测脚本是根据内存泄露的影响因素确定的,则服务器根据该检测脚本,可以对目标游戏程序文件进行内存泄露检测,从而得到内存泄露的检测结果,检测结果用于表示存在内存泄露的第一对象以及引用第一对象的至少一个第二对象之间的引用关系。
其中,存在内存泄露的对象指的是由于某种原因应该被释放但未被释放的对象,会造成系统内存的浪费,导致游戏运行速度减慢。
可选地,检测结果可以是任何可实现的形式,例如可以为引用关系图,本实施例对此不作限制。
参照图1,当测试终端与服务器进行信息交互时,某些对象会驻留在、服务器,如C、D、E,除此之外,常驻的对象如F,以及存在内存泄露的对象如G,也会驻留在服务器。在本实施例中,信息交互时的某些对象、常驻对象都是预先确定的,则可以从当前驻留的对象(即未释放的对象)中确定存在内存泄露的对象G。其中,常驻对象指的是长期正常驻留的对象。
因此,在本实施例中,根据检测脚本对程序文件进行内存泄露检测时,可以确定存在内存泄露的第一对象,然后考虑到内存泄露的影响因素,可以确定引用第一对象的至少一个第二对象,得到检测结果。
需要说明的是,由于检测脚本是根据内存泄露的影响因素确定的,采用检测脚本得到的引用关系图中包括第一对象以及引用第一对象的至少一个第二对象,并且第一对象和至少一个第二对象满足至少一种内存泄露的影响因素的情况,例如如下三种情况中的至少一个:
生命周期小于预设值的对象被生命周期大于预设值的对象引用;
循环引用中的任一对象定义了销毁操作;
存在循环引用且垃圾回收功能关闭。
可选地,第一对象以及引用第一对象的至少一个第二对象之间的引用关系包括以下中的至少一种:
直接引用、间接引用、循环引用。
示例性地,图3示出了本申请实施例提供的一种引用关系图的示意图,如图3所示,该引用关系图中包括第一对象、至少一个第二对象包括第二对象1、第二对象2、第二对象3、第二对象4、第二对象5、第二对象6、第二对象7、第二对象8、第二对象9。
参照图3,箭头方向表示引用关系,如第二对象1引用第二对象2。
在实际应用中,第一对象可以记作Avatar、第二对象1至第二对象9可以分别记作module-Timer、_timermanager、TimeManager、timer、_timermanager、TimeProxy、_closure_、deatroy_base、_self_。
其中,_timerManager定义在module-Timer中,其是全局对象,其生命周期等同于整个进程的生命周期,_timerManager是TimerManager的实例,也就是说,任何被TimerManager引用的对象都不会释放,由图3可知,TimerManager间接引用TimerProxy,TimerProxy通过destroy_base间接引用了Avatar对象,导致了Avatar对象的泄漏。
此外,由图3可知,TimerProxy和timermanager构成了一个环状,是循环引用关系。其中,该循环引用中timers和_timermanager属于中间对象,虽然存在于该循环引用关系链中,但不是实质因素,实质上是TimerProxy通过_timermanager调用TimerManger里面的方法或者属性,TimerManger通过timers调用TimerProxy里面的方法或者属性。
S103、服务器将检测结果发送给终端设备。
S104、终端设备根据检测结果,从第一对象和至少一个第二对象中,确定待解除引用关系的一组对象。
S105、终端设备解除目标游戏的程序文件中该两个对象之间的引用关系。
在本实施例中,服务器将检测结果发送给终端设备后,终端设备接收到该检测结果后,可以根据该检测结果,从第一对象和至少一个第二对象中可以确定待解除引用关系的一组对象,每组对象中包括两个对象,然后解除程序文件中这两个对象之间的引用关系。由此可知,通过该检测结果可以大大提高定位、解决内存泄露的效率和准确度。
其中,每组对象中包括两个对象,待解除引用关系的一组对象可以为该引用关系图中的任意两个对象。参照图3,为了释放Avatar,可以针对程序文件,解除该引用关系图中的任意两个对象之间的引用关系,例如,解除Avatar和_self_之间的引用关系,或者解除destroy_base和_closure_之间的引用关系。
示例性地,服务器确定待解除引用关系的一组对象,每组对象中包括两个对象,包括:
根据预先定义的两个对象的标识,确定待解除引用关系的一组对象。
也就是说,这两个对象的标识是预先定义的。参照图3,虽然Avatar被_self_直接引用,但要解除二者的引用关系是很难的,这是因为:如果引用对象的标识是以下划线开头和结尾(如_self_),表示是python内部的引用,很难解除。因此,沿着引用关系图往上,可以发现解除TimerProxy与Timermanager的引用关系即可。这样,一旦没有任何对象引用TimerProxy,TimerProxy及其直接或者间接引用的对象,如Avatar,都会释放。其中,TimerProxy与Timermanager的标识是预先定义的,即非python内部的引用。
可选地,在步骤S102之前还包括:
服务器接收第二请求,第二请求用于请求对程序文件进行内存泄露检测。
示例性地,由于该服务器通常设置有各种权限,在一些情况下,开发人员无法通过服务器启动检测任务,基于此,可以通过网页服务器将第二请求发送给该服务器,然后该服务器可以响应于第二请求,执行步骤S102-S103。
需要说明的是,该步骤可以在步骤S101之前执行,也可以在步骤S101之后执行,本实施例对此不作限制。
本实施例提供的内存泄露的处理方法,包括:服务器获取目标游戏的检测脚本,根据检测脚本,对目标游戏的程序文件进行内存泄露检测,得到检测结果,将检测结果发送给终端设备,终端设备根据检测结果,从第一对象和至少一个第二对象中,确定待解除引用关系的一组对象,并解除目标游戏程序文件中该两个对象之间的引用关系。本方案采用检测脚本对程序文件进行内存泄露检测,得到检测结果,根据检测结果解除程序文件中至少一组对象之间的引用关系,实现了对程序文件的修改,提高了内存泄露的处理效率和准确度,同时节省了人力成本。
在一种可能的实现中,步骤S102具体包括:获取程序文件对应的至少一个未释放对象,并从至少一个未释放对象中确定第一对象,通过运行检测脚本,对程序文件进行内存泄露检测,确定至少一个第二对象,以及第一对象与至少一个第二对象之间的引用关系,根据引用关系,绘制得到第一对象和至少一个第二对象的引用关系图,检测结果为引用关系图。在如上内存泄露处理方法的基础上,下面结合图4对本技术方案进行解释说明。
图4示出了本申请实施例提供另一种的内存泄露的处理方法的流程图,参照图4,该内存泄露的处理方法具体包括如下步骤:
S301、服务器获取目标游戏的检测脚本。
S302、服务器获取程序文件对应的至少一个未释放对象,并从至少一个未释放对象中确定第一对象。
其中,第一对象为程序文件中存在内存泄露的对象。参照图1,当测试终端与服务器进行信息交互时,某些对象会驻留在服务器,如C、D、E,除此之外,常驻的对象如F,以及存在内存泄露的对象如G,也会驻留在服务器,在本实施例中,当断开测试终端和服务器之间的网络连接后,C、D、E便被释放,则至少一个未释放对象包括常驻对象F和存在内存泄露的对象G,由于常驻对象是预先确定的,则可以从至少一个未释放对象中确定存在内存泄露的对象G,即第一对象。
S303、服务器运行检测脚本,对程序文件进行内存泄露检测,得到至少一个第二对象,以及第一对象与至少一个第二对象之间的引用关系。
S304、服务器根据引用关系,绘制得到第一对象和至少一个第二对象的引用关系图。
其中,检测脚本用于对程序文件进行内存泄露检测,检测脚本是根据内存泄漏的影响因素确定的,其中,内存泄漏的影响因素包括至少一个影响因素,其例如可以为以下中的至少一个:生命周期小于预设值的对象被生命周期大于所述预设值的对象引用;
循环引用中的任一对象定义了销毁操作;
存在循环引用且垃圾回收功能关闭。
基于上述步骤可以确定出存在内存泄漏的第一对象,然后运行检测脚本对程序文件进行内存泄漏检测,可以得到至少一个第二对象,以及第一对象与至少一个第二对象之间的引用关系。
需要说明的是,检测脚本是根据内存泄漏的影响因素确定的,则第一对象和至少一个第二对象满足至少一种内存泄露的影响因素的情况,例如如下三种情况中的至少一个:
生命周期小于预设值的对象被生命周期大于预设值的对象引用;
循环引用中的任一对象定义了销毁操作;
存在循环引用且垃圾回收功能关闭。
可选地,参照图3可知,第一对象与至少一个第二对象之间的引用关系包括以下中的至少一个:直接引用、间接引用、循环引用。
进一步地,服务器根据该引用关系,绘制得到第一对象和至少一个第二对象之间的引用关系图。绘制好的引用关系图可以参照图3,当然,在实际应用中,包括但不限于图3所示的引用关系图。
接着,可以执行步骤S103-S105,关于步骤S103-S105的实现过程参见图2所示的方法实施例,在此不再赘述。
在一种可能的实现中,在步骤S302之前,还包括:
S305、服务器向与服务器连接的测试终端发送第一请求。
参照图1,当测试终端与服务器进行信息交互时,某些对象还会驻留在服务器,如C、D、E,除此之外,常驻的对象如F,以及存在内存泄露的对象如G,也会驻留在服务器,为了避免将信息交互时间的某些对象误判为内存泄露的对象,则服务器可以向与其连接的测试终端发送第一请求,以断开与服务器之间的网络连接。其中,服务器可以采用iptable中断服务器与客户端的网络连接。
可选地,断开测试终端和服务器之间的网络连接时,测试终端还可以展示当前网络异常等提示信息。
其中,步骤S305可以在步骤S301之前执行,也可以在步骤S302之后执行,本实施例对此不作限制。
可选地,S305具体包括:
根据接收到的第二请求,向与服务器连接的测试终端发送第一请求,第二请求用于请求服务器对程序文件进行内存泄露检测。
第二请求可以是图1所示的网页服务器发送的,则在本实施例中,当服务器接收到第二请求后,可以向与该服务器连接的测试终端发送第一请求。
需要说明的是,在服务器执行完内存泄露检测后,还可以向网页服务器发送指示已执行内存泄露检测的响应。
本实施例提供的内存泄漏的检测方法,包括:服务器根据接收到的第二请求,向与服务器连接的测试终端发送第一请求,获取目标游戏的检测脚本,获取程序文件对应的至少一个未释放对象,并从至少一个未释放对象中确定第一对象,运行检测脚本,对程序文件进行内存泄露检测,得到至少一个第二对象,以及第一对象与至少一个第二对象之间的引用关系,根据引用关系,绘制得到第一对象和至少一个第二对象的引用关系图,并将检测结果发送给终端设备,终端设备根据检测结果,从第一对象和至少一个第二对象中,确定待解除引用关系的一组对象,并解除目标游戏程序文件中该两个对象之间的引用关系。本方案采用检测脚本对程序文件进行内存泄露检测,得到检测结果,根据检测结果解除程序文件中至少一组对象之间的引用关系,实现了对程序文件的修改,提高了内存泄露的处理效率和准确度,同时节省了人力成本。
基于同一发明构思,本申请实施例中还提供了与内存泄漏的处理方法对应的内存泄漏的处理装置,由于本申请实施例中的装置解决问题的原理与本申请实施例上述内存泄漏的处理方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
图5示出了本申请实施例提供的一种内存泄露的处理装置的结构示意图,如图5所示,该内存泄漏的处理装置50包括:
获取模块501,用于获取目标游戏的检测脚本,所述检测脚本是根据内存泄露的影响因素确定的;
处理模块502,用于根据所述检测脚本,对所述目标游戏的程序文件进行内存泄露检测,得到检测结果,所述检测结果用于表示存在内存泄露的第一对象以及引用所述第一对象的至少一个第二对象之间的引用关系;
发送模块503,用于将所述检测结果发送给终端设备,所述终端设备用于根据所述引用关系图,解除所述程序文件中一组对象之间的引用关系。
在一些实施例中,所述内存泄露的影响因素包括以下中的至少一个:
生命周期小于预设值的对象被生命周期大于所述预设值的对象引用;
循环引用中的任一对象定义了销毁操作;
存在循环引用且垃圾回收功能关闭。
在一些实施例中,所述发送模块503还用于:
向与所述服务器连接的测试终端发送第一请求,所述第一请求用于请求所述测试终端断开与所述服务器之间的网络连接。
在一些实施例中,所述处理模块502具体用于:
获取所述程序文件对应的至少一个未释放对象,并从所述至少一个未释放对象中确定所述第一对象;
通过运行所述检测脚本,对所述程序文件进行内存泄露检测,确定所述至少一个第二对象,以及所述第一对象与所述至少一个第二对象之间的引用关系;
根据所述引用关系,绘制得到所述第一对象和所述至少一个第二对象的引用关系图,所述检测结果为所述引用关系图。
在一些实施例中,所述发送模块503,具体用于:
根据接收到的第二请求,向与所述服务器连接的测试终端发送第一请求,所述第二请求用于请求所述服务器对所述程序文件进行内存泄露检测。
在一些实施例中,所述第一对象以及引用所述第一对象的至少一个第二对象之间的引用关系包括以下中的至少一种:
直接引用、间接引用、循环引用。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述服务器所执行的步骤的相关说明,这里不再详述。
图6示出了本申请实施例提供的一种内存泄露的处理装置的结构示意图,如图6所示,该内存泄漏的处理装置60包括:
接收模块601,用于接收服务器发送的检测结果,所述检测结果是所述服务器根据检测脚本对目标游戏的程序文件进行内存泄露检测得到的,所述检测脚本是根据内存泄露的影响因素确定的;
处理模块602,用于根据所述检测结果,从所述第一对象和所述至少一个第二对象中,确定待解除引用关系的一组对象,每组对象中包括两个对象;
解除目标游戏的程序文件中所述两个对象之间的引用关系。
在一些实施例中,所述处理模块602,具体用于:
根据预先定义的所述两个对象的标识,确定待解除引用关系的一组对象。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法终端设备所执行的步骤的相关说明,这里不再详述。
本申请实施例还提供了一种服务器70,图7示出了本申请实施例提供的一种服务器的结构示意图,如图7所示,服务器70包括:处理器701、存储器702、发送器703、接收器704和总线705,所述存储器702中存储有所述处理器701可执行的机器可读指令,当服务器70运行时,所述处理器701与所述存储器702之间通过总线705通信,所述处理器701执行所述机器可读指令时执行如下处理:
获取目标游戏的检测脚本,所述检测脚本是根据内存泄露的影响因素确定的;
根据所述检测脚本,对所述目标游戏的程序文件进行内存泄露检测,得到检测结果,所述检测结果用于表示存在内存泄露的第一对象以及引用所述第一对象的至少一个第二对象之间的引用关系;
将所述检测结果发送给终端设备,所述终端设备用于根据所述检测结果,解除所述程序文件中一组对象之间的引用关系。
在一些实施例中,所述内存泄露的影响因素包括以下中的至少一个:
生命周期小于预设值的对象被生命周期大于所述预设值的对象引用;
循环引用中的任一对象定义了销毁操作;
存在循环引用且垃圾回收功能关闭。
在一些实施例中,所述根据所述检测脚本,对所述目标游戏的程序文件进行内存泄露检测,得到检测结果之前,还包括:
向与所述服务器连接的测试终端发送第一请求,所述第一请求用于请求断开与所述服务器之间的网络连接。
在一些实施例中,所述根据所述检测脚本,对所述目标游戏的程序文件进行内存泄露检测,得到检测结果,包括:
获取所述程序文件对应的至少一个未释放对象,并从所述至少一个未释放对象中确定所述第一对象;
通过运行所述检测脚本,对所述程序文件进行内存泄露检测,确定所述至少一个第二对象,以及所述第一对象与所述至少一个第二对象之间的引用关系;
根据所述引用关系,绘制得到所述第一对象和所述至少一个第二对象的引用关系图,所述检测结果为所述引用关系图。
在一些实施例中,所述向与所述服务器连接的测试终端发送第一请求,包括:
根据接收到的第二请求,向与所述服务器连接的测试终端发送第一请求,所述第二请求用于请求所述服务器对所述程序文件进行内存泄露检测。
在一些实施例中,所述第一对象以及引用所述第一对象的至少一个第二对象之间的引用关系包括以下中的至少一种:
直接引用、间接引用、循环引用。
本申请实施例还提供了一种终端设备80,图8示出了本申请实施例提供的一种终端设备的结构示意图,如图8所示,终端设备80包括:处理器801、存储器802、发送器803、接收器804和总线805,所述存储器802中存储有所述处理器801可执行的机器可读指令,当终端设备80运行时,所述处理器801与所述存储器802之间通过总线805通信,所述处理器801执行所述机器可读指令时执行如下处理:
接收服务器发送的检测结果,所述检测结果是所述服务器根据检测脚本对目标游戏的程序文件进行内存泄露检测得到的,所述检测脚本是根据内存泄露的影响因素确定的;
根据所述检测结果,从所述第一对象和所述至少一个第二对象中,确定待解除引用关系的一组对象,每组对象中包括两个对象;
解除目标游戏的程序文件中所述两个对象之间的引用关系。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述内存泄漏的处理方法的步骤。
具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述内存泄漏的处理方法,从而实现了对程序文件的修改,提高了内存泄露的处理效率和准确度,同时节省了人力成本。
在一些实施例中,处理器可以包括一个或多个处理核(例如,单核处理器(S)或多核处理器(S))。仅作为举例,处理器可以包括中央处理单元(Central Processing Unit,CPU)、专用集成电路(Application Specific Integrated Circuit,ASIC)、专用指令集处理器(Application Specific Instruction-set Processor,ASIP)、图形处理单元(Graphics Processing Unit,GPU)、物理处理单元(Physics Processing Unit,PPU)、数字信号处理器(Digital Signal Processor,DSP)、现场可编程门阵列(Field ProgrammableGate Array,FPGA)、可编程逻辑器件(Programmable Logic Device,PLD)、控制器、微控制器单元、简化指令集计算机(Reduced Instruction Set Computing,RISC)、或微处理器等,或其任意组合。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统和装置的具体工作过程,可以参考方法实施例中的对应过程,本申请中不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序的介质。
以上仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以权利要求的保护范围为准。

Claims (13)

1.一种内存泄露的处理方法,其特征在于,应用于服务器,包括:
获取目标游戏的检测脚本,所述检测脚本是根据内存泄露的影响因素确定的;
根据所述检测脚本,对所述目标游戏的程序文件进行内存泄露检测,得到检测结果,所述检测结果用于表示存在内存泄露的第一对象以及引用所述第一对象的至少一个第二对象之间的引用关系;
将所述检测结果发送给终端设备,所述终端设备用于根据所述检测结果,解除所述程序文件中一组对象之间的引用关系。
2.根据权利要求1所述的方法,其特征在于,所述内存泄露的影响因素包括以下中的至少一个:
生命周期小于预设值的对象被生命周期大于所述预设值的对象引用;
循环引用中的任一对象定义了销毁操作;
存在循环引用且垃圾回收功能关闭。
3.根据权利要求1所述的方法,其特征在于,所述根据所述检测脚本,对所述目标游戏的程序文件进行内存泄露检测,得到检测结果之前,还包括:
向与所述服务器连接的测试终端发送第一请求,所述第一请求用于请求断开与所述服务器之间的网络连接。
4.根据权利要求1或3所述的方法,其特征在于,所述根据所述检测脚本,对所述目标游戏的程序文件进行内存泄露检测,得到检测结果,包括:
获取所述程序文件对应的至少一个未释放对象,并从所述至少一个未释放对象中确定所述第一对象;
通过运行所述检测脚本,对所述程序文件进行内存泄露检测,确定所述至少一个第二对象,以及所述第一对象与所述至少一个第二对象之间的引用关系;
根据所述引用关系,绘制得到所述第一对象和所述至少一个第二对象的引用关系图,所述检测结果为所述引用关系图。
5.根据权利要求3所述的方法,其特征在于,所述向与所述服务器连接的测试终端发送第一请求,包括:
根据接收到的第二请求,向与所述服务器连接的测试终端发送第一请求,所述第二请求用于请求所述服务器对所述程序文件进行内存泄露检测。
6.根据权利要求1所述的方法,其特征在于,所述第一对象以及引用所述第一对象的至少一个第二对象之间的引用关系包括以下中的至少一种:
直接引用、间接引用、循环引用。
7.一种内存泄露的处理方法,其特征在于,应用于终端设备,所述方法包括:
接收服务器发送的检测结果,所述检测结果是所述服务器根据检测脚本对目标游戏的程序文件进行内存泄露检测得到的,所述检测脚本是根据内存泄露的影响因素确定的,所述检测结果用于表示存在内存泄露的第一对象以及引用所述第一对象的至少一个第二对象之间的引用关系;
根据所述检测结果,从第一对象和至少一个第二对象中,确定待解除引用关系的一组对象,每组对象中包括两个对象;
解除目标游戏的程序文件中所述两个对象之间的引用关系。
8.根据权利要求7所述的方法,其特征在于,所述确定待解除引用关系的一组对象,每组对象中包括两个对象,包括:
根据预先定义的所述两个对象的标识,确定待解除引用关系的一组对象。
9.一种内存泄漏的处理装置,其特征在于,包括:
获取模块,用于获取目标游戏的检测脚本,所述检测脚本是根据内存泄露的影响因素确定的;
处理模块,用于根据所述检测脚本,对所述目标游戏的程序文件进行内存泄露检测,得到检测结果,所述检测结果用于表示存在内存泄露的第一对象以及引用所述第一对象的至少一个第二对象之间的引用关系;
发送模块,用于将所述检测结果发送给终端设备,所述终端设备用于根据所述检测结果,解除所述程序文件中一组对象之间的引用关系。
10.一种内存泄露的处理装置,其特征在于,包括:
接收模块,用于接收服务器发送的检测结果,所述检测结果是所述服务器根据检测脚本对目标游戏的程序文件进行内存泄露检测得到的,所述检测脚本是根据内存泄露的影响因素确定的;
处理模块,用于根据所述检测结果,从第一对象和至少一个第二对象中,确定待解除引用关系的一组对象,每组对象中包括两个对象;
解除目标游戏的程序文件中所述两个对象之间的引用关系。
11.一种服务器,其特征在于,包括:处理器、存储器、发送器、接收器和总线,所述存储器中存储有所述处理器可执行的机器可读指令,当服务器运行时,所述处理器与所述存储器之间通过总线通信,所述处理器执行所述机器可读指令,以执行如权利要求1至6任一所述方法的步骤。
12.一种终端设备,其特征在于,包括:处理器、存储器、发送器、接收器和总线,所述存储器中存储有所述处理器可执行的机器可读指令,当终端设备运行时,所述处理器与所述存储器之间通过总线通信,所述处理器执行所述机器可读指令,以执行如权利要求7或8所述方法的步骤。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时执行如权利要求1-8任一所述方法的步骤。
CN202010500067.7A 2020-06-04 2020-06-04 内存泄露的处理方法、装置及存储介质 Active CN111638990B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010500067.7A CN111638990B (zh) 2020-06-04 2020-06-04 内存泄露的处理方法、装置及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010500067.7A CN111638990B (zh) 2020-06-04 2020-06-04 内存泄露的处理方法、装置及存储介质

Publications (2)

Publication Number Publication Date
CN111638990A true CN111638990A (zh) 2020-09-08
CN111638990B CN111638990B (zh) 2023-04-28

Family

ID=72330355

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010500067.7A Active CN111638990B (zh) 2020-06-04 2020-06-04 内存泄露的处理方法、装置及存储介质

Country Status (1)

Country Link
CN (1) CN111638990B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113407419A (zh) * 2021-07-15 2021-09-17 腾讯数码(深圳)有限公司 内存泄漏检测方法、装置、计算机设备和存储介质
CN117149477A (zh) * 2023-02-08 2023-12-01 荣耀终端有限公司 内存泄露检测方法和装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108845934A (zh) * 2018-05-24 2018-11-20 深圳市腾讯网络信息技术有限公司 内存泄漏源的定位方法和装置、存储介质、电子装置
CN109558308A (zh) * 2018-09-29 2019-04-02 中国平安人寿保险股份有限公司 应用程序内存泄露检测方法、装置、电子设备及存储介质
CN109829298A (zh) * 2018-11-26 2019-05-31 努比亚技术有限公司 内存泄露风险检测方法、终端及计算机可读存储介质
CN110851281A (zh) * 2019-11-13 2020-02-28 北京无限光场科技有限公司 检测内存泄漏的方法、服务器、终端、系统及存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108845934A (zh) * 2018-05-24 2018-11-20 深圳市腾讯网络信息技术有限公司 内存泄漏源的定位方法和装置、存储介质、电子装置
CN109558308A (zh) * 2018-09-29 2019-04-02 中国平安人寿保险股份有限公司 应用程序内存泄露检测方法、装置、电子设备及存储介质
CN109829298A (zh) * 2018-11-26 2019-05-31 努比亚技术有限公司 内存泄露风险检测方法、终端及计算机可读存储介质
CN110851281A (zh) * 2019-11-13 2020-02-28 北京无限光场科技有限公司 检测内存泄漏的方法、服务器、终端、系统及存储介质

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113407419A (zh) * 2021-07-15 2021-09-17 腾讯数码(深圳)有限公司 内存泄漏检测方法、装置、计算机设备和存储介质
CN117149477A (zh) * 2023-02-08 2023-12-01 荣耀终端有限公司 内存泄露检测方法和装置

Also Published As

Publication number Publication date
CN111638990B (zh) 2023-04-28

Similar Documents

Publication Publication Date Title
CN110580226B (zh) 操作系统级程序的目标码覆盖率测试方法、系统及介质
CN111638990A (zh) 内存泄露的处理方法、装置及存储介质
CN112463581B (zh) 一种对分布式系统进行模糊测试的方法及系统
US20130007720A1 (en) Dynamic Isolated Debugging via Class Instrumentation
CN109255240B (zh) 一种漏洞处理方法和装置
US20070079288A1 (en) System and method for capturing filtered execution history of executable program code
CN110245073A (zh) 终端代码覆盖率监测方法、系统、介质和电子设备
CN112035314B (zh) 内存泄漏的监控方法、装置及电子设备
CN110209520B (zh) 一种提高ssd测试效率的方法、装置、计算机设备及存储介质
CN107229558B (zh) 软件测试方法和装置
CN105528284A (zh) 一种内核故障注入方法及电子设备
CN112256570A (zh) 远程调试方法、装置、设备及存储介质
CN111382048A (zh) 真机测试平台上移动设备的管理方法和装置
CN105678164A (zh) 检测恶意软件的方法及装置
CN104462962A (zh) 一种检测未知恶意代码和二进制漏洞的方法
CN105468507B (zh) 分支达标检测方法及装置
CN104615471A (zh) 一种终端的系统升级方法及装置
CN108614763B (zh) 一种应用的调试方法及装置
CN118567971A (zh) 用于测试计算机程序的方法
CN110597688A (zh) 监控信息采集方法及系统
CN112905199A (zh) 代码更新检测方法及装置
CN110808965B (zh) 一种监控系统的调试方法及装置
CN110928787A (zh) 自动化测试脚本录制回放方法、装置、设备和存储介质
CN104834586A (zh) 安卓界面自动化测试方法、装置及系统
CN114610516B (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
GR01 Patent grant
GR01 Patent grant