一种通过内存快照检测手机应用内存泄露的方法及装置与流程

文档序号:11323121阅读:222来源:国知局
一种通过内存快照检测手机应用内存泄露的方法及装置与流程

本发明涉及手机应用内存优化领域,尤其涉及一种通过内存快照检测手机应用的内存泄露的方法及装置。



背景技术:

在智能手机行业,随着手机应用的市场占有率越来越高,大部分的知名游戏开发公司都在手机游戏开发投入了较多的技术研发。随着手机游戏应用程序的复杂程度不断提高,其开发过程中不可避免地出现内存泄露的情况。存在内存泄漏的手机应用程序在运行一段时间后,占用系统的内存会越来越多,最后会被操作系统当成异常程序而杀掉。同时,内存泄漏还会使得内存自动回收机制频繁触发,从而影响手机应用性能,并造成手机应用的卡顿等影响用户体验的后果。

unity作为一种广泛应用的手机应用开发引擎,采用mono平台作为其c#虚拟机,且分配释放内存都使用mono平台中的相关接口;因此实际开发过程中需要提供一种实时反馈机制来定位mono平台的内存泄漏问题,使得手机应用开发人员能够更方便解决问题。目前内存快照比较是该平台比较常用的寻找内存泄漏的常用手段。具体地,手机应用开发人员将两次内存的状态截取出来后再进行比较,可以清楚地发现内存的变化,寻找内存的增量与泄漏点。鉴于上述原因,手机应用开发人员需要一套在手机应用运行期间的内存快照文件对比工具,以实时获取当前时刻手机游戏应用程序从操作系统分配所得的内存快照记录,从而可以通过对比执行某些操作的前后的两个内存快照记录,定位程序运行过程中的内存泄露问题。



技术实现要素:

本发明的目的是解决现有技术的不足,提供一种通过内存快照检测手机应用内存泄露的方法,能够获得在手机应用运行期实时,将可能发生泄漏的对象二进制数据导出为可疑泄漏对象表的外部文件中,协助手机应用开发人员快速定位手机应用内存泄漏问题的效果。

为了实现上述目的,本发明提出一种通过内存快照检测手机应用内存泄露的方法,用于安卓智能手机中基于unity引擎开发的程序,包括如下步骤:

s100)启动被检测手机应用,并监视该手机应用进程;

s200)执行第一操作步骤,触发unity引擎的mono平台内存使用变化,并保存第一内存快照记录;

s300)执行第二操作步骤,触发unity引擎的mono平台内存使用变化,并保存第二内存快照记录;

s400)通过对比该第一内存快照记录和该第二内存快照记录,实时将该第二内存快照记录新增对象的信息导出到外部文件。

在本发明的上述方法中,步骤s100是使用进程注入的方式监视该手机应用进程。

进一步地,步骤s200和步骤s300是通过监视unity引擎对应函数接口的方式,使得该第一操作步骤和该第二操作步骤被执行后,触发unity引擎的mono平台内存使用变化,并分别地保存为该第一内存快照记录和该第二内存快照记录。

在本发明的上述方法中,步骤s400导出的信息包括对象类型、大小和详细的二进制数据。

在本发明的上述方法中,步骤s400导出到外部文件的信息是可标识的。

本发明也提出了一种通过内存快照检测手机应用内存泄露的装置,用于安卓智能手机中基于unity引擎开发的程序,包括以下模块:

启动模块,用于启动被检测手机应用,并监视该手机应用进程;

触发模块,用于手机应用开发人员在执行第一操作步骤或第二操作步骤后,发出保存当前unity引擎的mono平台内存快照的消息;

保存模块,用于接收保存触发unity引擎的mono平台内存快照的消息后,保存第一内存快照记录或第二内存快照记录;

导出模块,用于通过对比该第一内存快照记录和该第二内存快照记录,实时将该第二内存快照记录新增对象的信息导出到外部文件。

在本发明的上述装置中,该启动模块是使用进程注入的方式监视该手机应用进程。

进一步地,该触发模块通过监视unity引擎对应函数接口的方式,使得该第一操作步骤或该第二操作步骤被执行后,发出保存unity引擎的mono平台内存快照的消息,且该保存模块保存该第一内存快照记录或该第二内存快照记录。

在本发明的上述装置中,该导出模块导出的信息包括对象类型、大小和详细的二进制数据。

在本发明的上述装置中,该导出模块导出到外部文件的信息是可标识的。

本发明还提供了一种计算机可读介质,包含用于执行上述通过内存快照检测手机内存泄露方法的指令。

本发明的有益效果为:手机应用开发人员能够在手机应用运行期实时,通过将可能发生泄漏的对象二进制数据导出为可疑泄漏对象表的外部文件中,从而快速定位手机应用内存泄漏问题的效果。

附图说明

图1所示为本发明通过内存快照检测手机内存泄露方法流程图;

图2所示为图1所示方法流程图中的步骤s100的子步骤方法流程图;

图3所示为图1所示方法流程图中的步骤s200及步骤s300的子步骤方法流程图;

图4所示为本发明通过内存快照检测手机内存泄露的装置结构示意图。

具体实施方式

以下将结合实施例和附图对本发明的构思、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本发明的目的、方案和效果。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。附图中各处使用的相同的附图标记指示相同或相似的部分。

图1所示为本发明通过内存快照检测手机内存泄露方法流程图。参照图1,本发明所公开的通过内存快照检测手机内存泄露方法包括如下步骤:

s100)启动被检测手机应用,并监视所述手机应用进程;

s200)执行第一操作步骤,触发unity引擎的mono平台内存使用变化,并保存第一内存快照记录;

s300)执行第二操作步骤,触发unity引擎的mono平台内存使用变化,并保存第二内存快照记录;

s400)通过对比所述第一内存快照记录和所述第二内存快照记录,实时将所述第二内存快照记录新增对象的信息导出到外部文件。

根据本发明的一个优选的实施例,参照图2所示的步骤s100的子步骤方法流程图,被检测手机应用是通过进程注入的方式接受监视的。具体地,手机应用开发人员启动被测试手机应用后,将实现上述通过内存快照检测手机内存泄露方法的功能代码,使用进程注入的方式,注入到被测试手机应用进程。上述被注入的功能代码将分别监视所述第一操作步骤(例如unity引擎进入新场景),及所述第二操作步骤(例如unity引擎退出新进入的场景)对应的unity引擎函数接口(即场景进入通知接口和场景退出通知接口)。当所述第一操作步骤或所述第二操作步骤对应的unity引擎函数接口被调用时,被注入的功能代码将发出对应的unity引擎函数接口被调用的消息。

进一步地,参照图3所示的步骤s200及步骤s300的子步骤方法流程图,步骤s200和步骤s300是通过监视unity引擎对应函数接口的方式,使得所述第一操作步骤和所述第二操作步骤被执行后,触发unity引擎的mono平台内存使用变化,并分别地保存为所述第一内存快照记录和所述第二内存快照记录。具体地,手机应用开发人员在执行所述第一操作步骤或所述第二操作步骤后,由于上述操作步骤触发了所述第一操作步骤或所述第二操作步骤对应的unity引擎函数接口,被注入的功能代码将发出对应的unity引擎函数接口被调用的消息,然后相应地保存当前内存快照记录,作为所述第一内存快照记录或所述第二内存快照记录。

在实际的测试过程中,手机应用开发人员可以在执行步骤200以后,在被检测手机应用在当前状态下运行一段时间,再执行步骤s300,以确定在所述第一操作步骤和所述第二操作步骤期间,被检测手机应用完整的内存使用变化状况;或者通过多次执行所述第一操作步骤和所述第二操作步骤,以确定所述第一操作步骤和所述第二操作步骤从操作系统分配的内存状况。

优选地,步骤s400导出的信息包括但不限于对象类型、大小和详细的二进制数据,协助手机应用开发人员通过内存的变化,定位内存的增量和泄露点。

优选地,步骤s400导出的信息是可标识的。具体地,若导出的对象是一个字符串,则可将二进制数据直接还原成可读的文本内容,协助手机应用开发人员快速定位泄露问题。

实现上述通过内存快照检测手机内存泄露方法的功能代码可编译而生成可执行程序,并保存在计算机可读介质中。

图4所示为本发明通过内存快照检测手机内存泄露装置结构示意图。所述装置用于安卓智能手机中基于unity引擎开发的程序。参照图4,图中箭头的表示数据流向。

手机应用开发人员开始测试游戏后,启动模块启动被检测手机应用,并监视所述手机应用进程;手机应用开发人员在执行第一操作步骤(例如unity引擎进入新场景)后,触发unity引擎的mono平台从内存使用变化,从而令触发模块向保存模块发出执行保存指令的消息;保存模块接收到保存指令的消息后,保存当前内存快照记录,作为触发unity引擎的mono平台内存使用变化时的第一内存快照记录;类似地,手机应用开发人员在执行第二操作步骤(例如unity引擎退出新进入的场景)后,触发unity引擎的mono平台内存使用变化,从而令触发模块再次向保存模块发出执行保存指令的消息;保存模块再次接收到保存指令的消息后,保存当前内存快照记录,作为触发unity引擎的mono平台内存使用变化时的第二内存快照记录;第二操作步骤执行后,保存模块向导出模块发出消息;导出模块接收到来自保存模块的消息后,通过对比所述第一内存快照记录和所述第二内存快照记录,实时将所述第二内存快照记录新增对象的信息导出到外部文件。

优选地,所述启动模块使用进程注入的方式监视所述手机应用进程,即手机应用开发人员在开始测试游戏后,所述启动模块将所述触发模块注入到待测试游戏进程中。所述触发模块将分别监视所述第一操作步骤及所述第二操作步骤对应的unity引擎函数接口;当所述第一操作步骤及所述第二操作步骤对应的unity引擎函数接口被调用时,所述触发模块将发出对应的unity引擎函数接口被调用的消息。

进一步地,所述触发模块通过监视unity引擎对应函数接口的方式,使得所述第一操作步骤和所述第二操作步骤被执行后,触发unity引擎的mono平台内存使用变化,且所述保存模块分别地保存为所述第一内存快照记录和所述第二内存快照记录。具体地,手机应用开发人员在执行所述第一操作步骤或所述第二操作步骤后,由于上述操作步骤触发了所述第一操作步骤或所述第二操作步骤对应的unity引擎函数接口,所述触发模块将发出对应的unity引擎函数接口被调用的消息;所述保存模块相应地保存当前内存快照记录,作为所述第一内存快照记录或所述第二内存快照记录。

在实际的测试过程中,手机应用开发人员在执行第一操作步骤,且通过所述触发模块及所述保存模块保存第一内存快照记录后,在被检测手机应用在当前状态下运行一段时间,再执行第二操作步骤,以通过所述触发模块及所述保存模块保存第二内存快照记录,使得确定在所述第一操作步骤和所述第二操作步骤期间,被检测手机应用完整的内存使用变化状况;或者通过多次执行所述第一操作步骤和所述第二操作步骤,以确定所述第一操作步骤和所述第二操作步骤从操作系统分配的内存状况。

优选地,所述导出模块导出的信息包括但不限于对象类型、大小和详细的二进制数据,协助手机应用开发人员通过内存的变化,定位内存的增量和泄露点。

优选地,所述导出模块导出的信息是可标识的。具体地,若导出的对象是一个字符串,则可将二进制数据直接还原成可读的文本内容,协助手机应用开发人员快速定位泄露问题。

尽管本发明的描述已经相当详尽且特别对几个所述实施例进行了描述,但其并非旨在局限于任何这些细节或实施例或任何特殊实施例,而是应当将其视作是通过参考所附权利要求考虑到现有技术为这些权利要求提供广义的可能性解释,从而有效地涵盖本发明的预定范围。此外,上文以发明人可预见的实施例对本发明进行描述,其目的是为了提供有用的描述,而那些目前尚未预见的对本发明的非实质性改动仍可代表本发明的等效改动。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1