CN110865940B - 一种程序卡顿定位的方法以及相关装置 - Google Patents
一种程序卡顿定位的方法以及相关装置 Download PDFInfo
- Publication number
- CN110865940B CN110865940B CN201911096389.3A CN201911096389A CN110865940B CN 110865940 B CN110865940 B CN 110865940B CN 201911096389 A CN201911096389 A CN 201911096389A CN 110865940 B CN110865940 B CN 110865940B
- Authority
- CN
- China
- Prior art keywords
- function
- execution
- positioning
- frame
- stuck
- 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.)
- Active
Links
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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请公开了一种卡顿定位的方法以及相关装置,通过实时获取程序运行时每个帧的执行函数,并将统计桩***执行函数中的多个执行函数中,以得到检测函数;然后记录所述检测函数的函数信息,以确定函数执行耗时;当函数执行耗时满足预设条件时,则定位所述检测函数中对应的执行函数为卡顿发生点。从而实现了对于程序运行过程中卡顿点的确定过程,该过程不需要获取大量的数据,就可以准确定位卡顿帧的函数执行耗时和相关数据,占用资源少,提高了定位过程的稳定性,且对于终端硬件要求低,具有良好的适用范围。
Description
技术领域
本申请涉及计算机技术领域,尤其涉及一种程序卡顿定位的方法以及相关装置。
背景技术
随着移动终端相关技术的发展,越来越多的智能设备出现在人们的生活中,其中,游戏是一种主要的终端应用程序,人们需要实时的掌握游戏运行过程中的运行状态以做出优化,保证游戏运行顺畅。
目前,在安卓手机的Unity3D的IL2CPP版本在卡顿定位上是采用profile工具实现,这类实现方式必须编译时选择development Build,此版本主要用于前期的调试和测试用,其中主要实现原理在编译中引擎***了很多性能统计代码,方便提取内存/CPU/GPU等的性能,此统计数据是各个纬度的全量信息进行统计。当使用development版本时,在电脑端启动profiler工具,profiler工具或通过USB或者ip连接development版本,development版本会将统计每帧数据源源不断的发送给profiler工具。为统计程序的运行状态以确定卡顿原因,需要获取的数据包含较多,如:每帧的CPU利用率、内存使用情况、函数执行耗时、drawcall数等。
但是,上述确定卡顿原因的过程中涉及的数据量较大,需要加入很多调试脚本,占用终端处理器的资源,对于终端的硬件要求较高,影响卡顿定位过程的稳定性及可适用性。
发明内容
有鉴于此,本申请第一方面提供一种卡顿定位的方法,可应用于静态数据库的***或程序过程中,具体包括:实时获取程序运行时每个帧的执行函数,所述执行函数用于指示所述程序的运行过程;
将统计桩***多个所述执行函数,以得到检测函数;
记录所述检测函数的函数信息和帧信息,所述函数信息包括函数执行耗时和调用关系数据;
若所述函数执行耗时满足预设条件,则定位所述检测函数中对应的帧信息为卡顿发生点,所述预设条件基于时延阈值设定。
优选的,在本申请一些可能的实现方式中,所述实时获取程序运行时每个帧的执行函数之前,所述方法还包括:
获取所述程序的编译版本;
根据所述编译版本反编译所述执行函数,以得到所述执行函数与函数地址的对应关系,所述函数地址用于指示所述统计桩的***点;
所述将统计桩***多个所述执行函数,以得到检测函数,包括:
根据所述***点将所述统计桩***多个所述执行函数,以得到所述检测函数。
优选的,在本申请一些可能的实现方式中,所述若所述函数执行耗时满足预设条件,则定位所述检测函数中对应的帧信息为卡顿发生点,包括:
若所述卡顿时长满足预设条件,则确定当前卡顿时长对应的执行函数为中心函数;
获取在预设范围内的多个波动执行函数对应的帧信息,以定位为所述卡顿发生点,所述预设范围基于所述中心函数确定。
优选的,在本申请一些可能的实现方式中,所述获取在预设范围内的多个波动执行函数对应的帧信息,以定位为所述卡顿发生点,包括:
获取在所述预设范围内的多个波动执行函数;
判断所述多个波动执行函数对应的卡顿时长是否均大于波动阈值,所述波动阈值对应的数值小于所述时延阈值对应的数值;
若是,则将所述多个波动执行函数和所述中心函数定位为所述卡顿发生点。
优选的,在本申请一些可能的实现方式中,所述定位所述检测函数中对应的执行函数为卡顿发生点之后,所述方法还包括:
确定所述卡顿发生点对应的卡顿帧;
关联所述卡顿与所述卡顿帧,并上报至服务器,所述服务器用于对所述卡顿发生点进行统计和展示,以得到卡顿原因。
优选的,在本申请一些可能的实现方式中,所述关联所述卡顿与所述卡顿帧,并上报至服务器,包括:
关联所述卡顿与所述卡顿帧,并记录对应的卡顿时长,以获取累计卡顿时长;
若所述累计卡顿时长满足上报条件,则上报所述卡顿与所述卡顿帧至服务器。
优选的,在本申请一些可能的实现方式中,所述卡顿定位的方法应用于终端设备,所述终端设备为区块链节点中的区块节点设备。
本申请第二方面提供一种卡顿定位的装置,包括:获取单元,用于实时获取程序运行时每个帧的执行函数,所述执行函数用于指示所述程序的运行过程;
***单元,用于将统计桩***多个所述执行函数,以得到检测函数;
记录单元,用于记录所述检测函数的函数信息和帧信息,所述函数信息包括函数执行耗时和调用关系数据;
定位单元,用于若所述函数执行耗时满足预设条件,则定位所述检测函数中对应的帧信息为卡顿发生点,所述预设条件基于时延阈值设定。
优选的,在本申请一些可能的实现方式中,所述获取单元,还用于获取所述程序的编译版本;
所述获取单元,还用于根据所述编译版本反编译所述执行函数,以得到所述执行函数与函数地址的对应关系,所述函数地址用于指示所述统计桩的***点;
所述***单元,具体用于根据所述***点将所述统计桩***多个所述执行函数,以得到所述检测函数。
优选的,在本申请一些可能的实现方式中,所述定位单元,具体用于若所述卡顿时长满足预设条件,则确定当前卡顿时长对应的执行函数为中心函数;
所述定位单元,具体用于获取在预设范围内的多个波动执行函数对应的帧信息,以定位为所述卡顿发生点,所述预设范围基于所述中心函数确定。
优选的,在本申请一些可能的实现方式中,所述定位单元,具体用于获取在所述预设范围内的多个波动执行函数;
所述定位单元,具体用于判断所述多个波动执行函数对应的卡顿时长是否均大于波动阈值,所述波动阈值对应的数值小于所述时延阈值对应的数值;
所述定位单元,具体用于若是,则将所述多个波动执行函数和所述中心函数定位为所述卡顿发生点。
优选的,在本申请一些可能的实现方式中,所述定位单元,还用于确定所述卡顿发生点对应的卡顿帧;
所述定位单元,还用于关联所述卡顿与所述卡顿帧,并上报至服务器,所述服务器用于对所述卡顿发生点进行统计和展示,以得到卡顿原因。
优选的,在本申请一些可能的实现方式中,所述定位单元,还用于关联所述卡顿与所述卡顿帧,并记录对应的卡顿时长,以获取累计卡顿时长;
所述定位单元,还用于若所述累计卡顿时长满足上报条件,则上报所述卡顿与所述卡顿帧至服务器。
本申请第三方面提供一种计算机设备,包括:存储器、处理器以及总线***;所述存储器用于存储程序代码;所述处理器用于根据所述程序代码中的指令执行上述第一方面或第一方面任一项所述的卡顿定位的的方法。
本申请第四方面提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面任一项所述的卡顿定位的的方法。
从以上技术方案可以看出,本申请实施例具有以下优点:
通过实时获取程序运行时每个帧的执行函数,并将统计桩***执行函数中的多个执行函数中,以得到检测函数;然后记录所述检测函数的函数信息和帧信息,所述函数信息包括函数执行耗时和调用关系数据;当所述函数执行耗时满足预设条件时,则定位所述检测函数中对应的执行函数为卡顿发生点。从而实现了对于程序运行过程中卡顿点的确定过程,该过程不需要获取大量的数据,就可以准确定位卡顿帧的函数执行耗时和相关数据,占用资源少,提高了定位过程的稳定性,且对于终端硬件要求低,具有良好的适用范围。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为卡顿定位***运行的网络架构图;
图2为本申请实施例提供的一种卡顿定位的流程架构图;
图3为本申请实施例提供的一种卡顿定位的方法的流程图;
图4为本申请实施例提供的一种卡顿定位的界面显示示意图;
图5为本申请实施例提供的另一种卡顿定位的界面显示示意图;
图6为本申请实施例提供的另一种卡顿定位的界面显示示意图;
图7为本申请实施例提供的另一种卡顿定位的界面显示示意图;
图8为本申请实施例提供的另一种卡顿定位的界面显示示意图;
图9为本申请实施例提供的卡顿定位装置的结构示意图;
图10为本申请实施例提供的另一种卡顿定位装置的结构示意图;
图11A为本申请实施例提供的一种数据共享***示意图;
图11B为本申请实施例提供的数据共享***中的区块组成示意图;
图11C为本申请实施例提供的区块链节点的数据传输响应示意图。
具体实施方式
本申请实施例提供了一种卡顿定位的方法以及相关装置,可以应用于终端设备程序运行过程中卡顿定位的***或过程中,具体通过实时获取程序运行时每个帧的执行函数,并将统计桩***执行函数中的多个执行函数中,以得到检测函数;然后记录所述检测函数的函数信息和帧信息,所述函数信息包括函数执行耗时和调用关系数据;当所述函数执行耗时满足预设条件时,则定位所述检测函数中对应的执行函数为卡顿发生点。从而实现了对于程序运行过程中卡顿点的确定过程,该过程不需要获取大量的数据,就可以准确定位卡顿帧的函数执行耗时和相关数据,占用资源少,提高了定位过程的稳定性,且对于终端硬件要求低,具有良好的适用范围。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“对应于”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,对本申请中出现的相关名词缩写进行解释,如下:
U3D:也称Unity3D,是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。
IL2CPP:Unity自4.6.1p5版本研发了IL2cpp,把本来应该再mono的虚拟机上跑的中间代码(IL)转换成cpp代码,这样再把生成的cpp代码,利用C++的跨平台特性,在各个平台上通过对各平台都有良好优化的native C++编译器编译,以获得更高的效率和更好的兼容性。
Development Build:U3D游戏编译选项,开发者的调试版本,当编译时勾选后可以自动连接到Profiler。
Development版本:勾选Development Build编译选项编译出来的版本。
高配机:测试时使用的机器配置情况,高配机代表配置较好,如目前的Android高配机标准是8G内存以上。
应理解,本申请提供的卡顿定位方法可以应用于可应用于卡顿定位***的运行过程中,具体的,卡顿定位***可以运行于如图1所示的网络架构中,如图1所示,是卡顿定位***运行的网络架构图,如图可知,卡顿定位***可以提供与多个信息源的卡顿定位,通过在程序的执行函数中***统计桩,从而得到程序运行时延的卡顿波形,进而判断卡顿定位结果,可以理解的是,图1中示出了多种终端设备,在实际场景中可以有更多或更少种类的终端设备参与到卡顿定位的过程中,具体数量和种类因实际场景而定,此处不做限定;另外,图1中示出了一个服务器,但在实际场景中,也可以有多个服务器的参与,特别是在多应用数据交互的场景中,具体服务器数量因实际场景而定。
可以理解的是,上述卡顿定位***可以运行于个人移动终端,例如:作为“卡顿计”这样的应用,也可以运行于服务器,还可以作为运行于第三方设备以提供卡顿定位,以得到信息源的卡顿定位结果,例如:在移动终端中,首先开启相关的卡顿定位程序,然后通过该程序拉取待检测游戏以启动,进而进行卡顿定位并分析;具体的卡顿定位***可以是以一种程序的形式在上述设备中运行,也可以作为上述设备中的***部件进行运行,还可以作为云端服务程序的一种,具体运作模式因实际场景而定,此处不做限定。
随着移动终端相关技术的发展,越来越多的智能设备出现在人们的生活中,其中,游戏是一种主要的终端应用程序,人们需要实时的掌握游戏运行过程中的运行状态以做出优化,保证游戏运行顺畅。
目前,在安卓手机的Unity3D的IL2CPP版本在卡顿定位上是采用profile工具实现,这类实现方式必须编译时选择development Build,此版本主要用于前期的调试和测试用,其中主要实现原理在编译中引擎***了很多性能统计代码,方便提取内存/CPU/GPU等的性能,此统计数据是各个纬度的全量信息进行统计。当使用development版本时,在电脑端启动profiler工具,profiler工具或通过USB或者ip连接development版本,development版本会将统计每帧数据源源不断的发送给profiler工具。为统计程序的运行状态以确定卡顿原因,需要获取的数据包含较多,如:每帧的CPU利用率、内存使用情况、函数执行耗时、drawcall数等。
但是,上述确定卡顿原因的过程中涉及的数据量较大,需要加入很多调试脚本,占用终端处理器的资源,对于终端的硬件要求较高,影响卡顿定位过程的稳定性及可适用性;另外,现有技术只能针对dev版本,非dev版本无法定位性能。
为了解决上述问题,本申请提出了一种卡顿定位的方法,该方法应用于图2所示的卡顿定位的流程框架中,如图2所示,是一种卡顿定位的流程架构图,图中包括版本编译、hook执行函数、统计卡顿信息以及服务器,其中,版本编译用于获取当前IL2CPP版本后通过脚本调用IDA反编译工具获取函数和地址的对应关系,进而进行反编译,以在执行函数中***统计桩,进而进行卡顿信息的统计,并得到卡顿波形,并将满足预设条件的帧以及相关函数信息上传服务器,以便于服务器针对性的进行优化。
可以理解的是,此处以U3D引擎中的IL2CPP版本为例进行说明,具体的也可以是基于其他引擎的版本***结果,具体的版本选择因实际场景而定,此处不做限定。
可以理解的是,本申请所提供的方法可以为一种程序的写入,以作为硬件***中的一种处理逻辑,也可以作为一种卡顿定位装置,采用集成或外接的方式实现上述处理逻辑。作为一种实现方式,该卡顿定位装置通过实时获取程序运行时每个帧的执行函数,并将统计桩***执行函数中的多个执行函数中,以得到检测函数;然后记录所述检测函数的函数信息和帧信息,所述函数信息包括函数执行耗时和调用关系数据;当所述函数执行耗时满足预设条件时,则定位所述检测函数中对应的执行函数为卡顿发生点。从而实现了对于程序运行过程中卡顿点的确定过程,该过程不需要获取大量的数据,就可以准确定位卡顿帧的函数执行耗时和相关数据,占用资源少,提高了定位过程的稳定性,且对于终端硬件要求低,具有良好的适用范围。
结合上述流程架构,下面将对本申请中卡顿定位的方法进行介绍,请参阅图3,图3为本申请实施例提供的一种卡顿定位的方法的流程图,本申请实施例至少包括以下步骤:
301、实时获取程序运行时每个帧的执行函数。
本实施例中,所述执行函数用于指示所述程序的运行过程,即执行函数的执行时间可以反映程序的卡顿情况。
在一种可能的场景中,程序为搭载在U3D引擎中的IL2CPP版本的游戏,由于现有技术只能针对选择编辑development版本,才能和profile工具进行联调,以抓取执行函数,但对于非development版本则无法执行;故本实施例还可以在实时获取程序运行时每个帧的执行函数之前,进行引擎的版本编译。
具体的,首先获取所述程序的编译版本;然后根据所述编译版本反编译所述执行函数,以得到所述执行函数与函数地址的对应关系;进而即可以hook到程序运行时每个帧的执行函数信息。
可以理解的是,上述引擎版本的说明为示例,对于程序可以搭载的其他版本的其他引擎依然可以采用本实施例提供的方法,此处不做限定。
在一种可能的显示方式中,如图4所示,是本申请实施例提供的一种卡顿定位的界面显示示意图,图中通过“卡顿计”这种插件拉起游戏,进而实现对应游戏的hook执行函数的过程;另外,在该界面中还可以对相关游戏的版本以及运行的引擎进行显示,例如“魂斗罗归来”这款游戏的版本为1.19.58.4906,搭载的游戏引擎为Unity3D,相关人员可以明确的知晓版本信息以便于后续的优化过程。
上述场景介绍了程序为游戏的情况,但应当注意的是,本实施例提供的卡顿定位方法也可以应用于其他类型的APP的卡顿定位中,如图5所示,是本申请实施例提供的一种卡顿定位的界面显示示意图,图中示出了两种测试场景,对应于对卡顿要求较高的战斗场景测试,即要求卡顿尽可能的少;以及相对平均的非战斗场景测试,可以通过不同模式的选择,实现针对性的卡顿定位过程,从而达到节约时间以及***资源的目的。
302、将统计桩***多个所述执行函数,以得到检测函数。
本实施例中,统计桩用于在执行函数的程序代码中某些位置***或修改一些代码,从而在执行函数运行过程中获取执行函数耗时并加以分析。
可选的,统计桩在***过程中会涉及***点的选择,一般可以采用遍历class文件,然后通过ASM对字节码进行修改,即可完成字节码插桩;另外,还可以采用步骤301中,版本编译后的程序,根据执行函数与函数地址的对应关系,确定***点,进而根据***点将所述统计桩***多个所述执行函数,以得到所述检测函数。
可以理解的是,检测函数与执行函数具有对应关系,可以通过确定的检测函数关联搜索到对应的执行函数,以实现执行函数的定位。
303、记录所述检测函数的函数信息和帧信息。
本实施例中,函数信息包括函数执行耗时和调用关系数据,而帧信息对应于当前检测函数对应的画面帧,其中,函数执行耗时也可以成为卡顿时长、卡顿耗时、函数耗时或执行时间等。
可以理解的是,函数执行耗时可以进行实时统计以便于直观的观察分析,例如采用波形图的方式,即函数信息包括检测函数的卡顿波形,卡顿波形即为每个执行函数对应执行时间的集合,如图6所示,是本申请实施例提供的一种卡顿定位的界面显示示意图,进行卡顿波形的记录过程中也可以对每轮测试的数据进行统计,统计内容可以包括测试游戏的名称、测试机型、测试时长、测试场景(模式)、卡顿次数、严重卡顿次数以及测试时间。
可选的,卡顿波形还可以是对于多个场景分别进行统计和展示的结果,如图7所示,是本申请实施例提供的一种卡顿定位的界面显示示意图,图中包括多个场景的卡顿波形,并对对应的卡顿时长进行了统计,以及卡顿时长对应的严重程度进行了评估,并且基于卡顿波形的特性可以得出卡顿的连续性,并以表格的形式对应的展示于相关界面中,以便于相关人员查验。
303、若函数执行耗时满足预设条件,则定位所述检测函数中对应的帧信息为卡顿发生点。
本实施例中,所述预设条件基于时延阈值设定,预设条件可以是大于时延阈值,例如:时延阈值为100ms,则函数执行耗时大于100ms的检测函数即定位为卡顿发生点。
可选的,上述场景图5中指出了可能存在时延阈值要求不一样的情况,即针对性的设置时延阈值,例如:对于战斗场景测试中,时延阈值为50ms,而对于非战斗场景测试中,时延阈值为100ms。
可以理解的是,预设条件还可以是基于时延阈值设定的范围值,如场景图6中示出的,可以有卡顿与严重卡顿的区别,例如:时延阈值为100ms,预设条件可以是卡顿时长在100±20ms范围的检测函数为卡顿发生点,对于卡顿时长大于150ms的检测函数为严重卡顿发生点。
可选的,对于取值范围确定的过程还可以是对于相邻帧的检测,即对于已判定的卡顿发生点的检测函数的相邻函数进行浮动范围的筛选;可选的,通过判定所述卡顿时长满足预设条件,进而确定当前卡顿时长对应的执行函数为中心函数;然后获取在预设范围内的多个波动执行函数对应的帧信息,以定位为所述卡顿发生点,所述预设范围基于所述中心函数确定。
对于相邻函数的定位过程可以是通过获取在所述预设范围内的多个波动执行函数;然后判断所述多个波动执行函数对应的卡顿时长是否均大于波动阈值,所述波动阈值对应的数值小于所述时延阈值对应的数值;若是,则将所述多个波动执行函数和所述中心函数定位为所述卡顿发生点。
可选的,通过上述实施例确定卡顿发生点之后,可以将相关的卡顿信息发送至服务器,以对所述卡顿发生点进行分析,以得到卡顿原因,进而对相关程序进行优化。具体的,可首先确定所述卡顿发生点对应的卡顿帧;然后关联所述卡顿与所述卡顿帧,并上报至服务器,使得服务器用于对所述卡顿发生点进行统计和展示,以得到卡顿原因。
在上报服务器之前,还可以先对卡顿定位点的相关信息进行整理,具体的,可参照图8所示的方式,如图8所示,是本申请实施例提供的一种卡顿定位的界面显示示意图,图中对卡顿波形中标记为卡顿定位点的帧进行了突出,并将对应的卡顿时长进行了显示,进一步的,对该卡顿帧中所有的执行函数进行了耗时统计,相关人员可以明确的知晓相关执行函数的耗时信息。
可选的,也可以以卡顿帧中总的耗时作为上报条件,即通过关联所述卡顿与所述卡顿帧,并记录对应的卡顿时长,以获取累计卡顿时长;若所述累计卡顿时长满足上报条件,则上报所述卡顿与所述卡顿帧至服务器。
结合上述实施例可知,通过实时获取程序运行时每个帧的执行函数,并将统计桩***执行函数中的多个执行函数中,以得到检测函数;然后记录所述检测函数的函数信息和帧信息,所述函数信息包括函数执行耗时和调用关系数据;当所述函数执行耗时满足预设条件时,则定位所述检测函数中对应的执行函数为卡顿发生点。从而实现了对于程序运行过程中卡顿点的确定过程,该过程不需要获取大量的数据,就可以准确定位卡顿帧的函数执行耗时和相关数据,占用资源少,提高了定位过程的稳定性,且对于终端硬件要求低,具有良好的适用范围。
为了更好的实施本申请实施例的上述方案,下面还提供用于实施上述方案的相关装置。请参阅图9,图9为本申请实施例提供的卡顿定位装置的结构示意图,卡顿定位装置900包括:
获取单元901,用于实时获取程序运行时每个帧的执行函数,所述执行函数用于指示所述程序的运行过程;
***单元902,用于将统计桩***多个所述执行函数,以得到检测函数;
记录单元903,用于记录所述检测函数的函数信息和帧信息,所述函数信息包括函数执行耗时和调用关系数据;
定位单元904,用于若所述函数执行耗时满足预设条件,则定位所述检测函数中对应的帧信息为卡顿发生点,所述预设条件基于时延阈值设定。
优选的,在本申请一些可能的实现方式中,所述获取单元901,还用于获取所述程序的编译版本;
所述获取单元901,还用于根据所述编译版本反编译所述执行函数,以得到所述执行函数与函数地址的对应关系,所述函数地址用于指示所述统计桩的***点;
所述***单元902,具体用于根据所述***点将所述统计桩***多个所述执行函数,以得到所述检测函数。
优选的,在本申请一些可能的实现方式中,所述定位单元904,具体用于若所述卡顿时长满足预设条件,则确定当前卡顿时长对应的执行函数为中心函数;
所述定位单元904,具体用于获取在预设范围内的多个波动执行函数对应的帧信息,以定位为所述卡顿发生点,所述预设范围基于所述中心函数确定。
优选的,在本申请一些可能的实现方式中,所述定位单元904,具体用于获取在所述预设范围内的多个波动执行函数;
所述定位单元904,具体用于判断所述多个波动执行函数对应的卡顿时长是否均大于波动阈值,所述波动阈值对应的数值小于所述时延阈值对应的数值;
所述定位单元904,具体用于若是,则将所述多个波动执行函数和所述中心函数定位为所述卡顿发生点。
优选的,在本申请一些可能的实现方式中,所述定位单元904,还用于确定所述卡顿发生点对应的卡顿帧;
所述定位单元904,还用于关联所述卡顿与所述卡顿帧,并上报至服务器,所述服务器用于对所述卡顿发生点进行统计和展示,以得到卡顿原因。
优选的,在本申请一些可能的实现方式中,所述定位单元904,还用于关联所述卡顿与所述卡顿帧,并记录对应的卡顿时长,以获取累计卡顿时长;
所述定位单元904,还用于若所述累计卡顿时长满足上报条件,则上报所述卡顿与所述卡顿帧至服务器。
通过实时获取程序运行时每个帧的执行函数,并将统计桩***执行函数中的多个执行函数中,以得到检测函数;然后记录所述检测函数的函数信息和帧信息,所述函数信息包括函数执行耗时和调用关系数据;当所述函数执行耗时满足预设条件时,则定位所述检测函数中对应的执行函数为卡顿发生点。从而实现了对于程序运行过程中卡顿点的确定过程,该过程不需要获取大量的数据,就可以准确定位卡顿帧的函数执行耗时和相关数据,占用资源少,提高了定位过程的稳定性,且对于终端硬件要求低,具有良好的适用范围。
本申请实施例还提供了一种卡顿定位装置,请参阅图10,图10是本申请实施例提供的另一种卡顿定位装置的结构示意图,该卡顿定位装置1000可因配置或性能不同而产生比较大的差异,可以包括一个或一个以***处理器(central processing units,CPU)1022(例如,一个或一个以上处理器)和存储器1032,一个或一个以上存储应用程序1042或数据1044的存储介质1030(例如一个或一个以上海量存储设备)。其中,存储器1032和存储介质1030可以是短暂存储或持久存储。存储在存储介质1030的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对卡顿定位装置中的一系列指令操作。更进一步地,中央处理器1022可以设置为与存储介质1030通信,在卡顿定位装置1000上执行存储介质1030中的一系列指令操作。
卡顿定位装置1000还可以包括一个或一个以上电源1026,一个或一个以上有线或无线网络接口1050,一个或一个以上输入输出接口1058,和/或,一个或一个以上操作***1041,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述实施例中由卡顿定位装置所执行的步骤可以基于该图9所示的卡顿定位装置结构。
本申请实施例中还提供一种计算机可读存储介质,该计算机可读存储介质中存储有卡顿定位指令,当其在计算机上运行时,使得计算机执行如前述图2至图8所示实施例描述的方法中卡顿定位装置所执行的步骤。
本申请实施例中还提供一种包括卡顿定位指令的计算机程序产品,当其在计算机上运行时,使得计算机执行如前述图2至图8所示实施例描述的方法中卡顿定位装置所执行的步骤。
本申请实施例还提供了一种卡顿定位***,所述卡顿定位***可以包含图9所描述实施例中的卡顿定位装置,或者图10所描述的卡顿定位装置。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的***,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的***,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,卡顿定位装置,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(read-onlymemory,ROM)、随机存取存储器(random access memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
另外,上述卡顿定位的方法和装置还可以应用于数据共享***中,参见图11A所示的数据共享***,数据共享***1100是指用于进行节点与节点之间数据共享的***,该数据共享***中可以包括多个节点1101,多个节点1101可以是指数据共享***中各个客户端,其中,每个客户端运行于基于本申请方法对应的终端设备上。每个节点1101在进行正常工作可以接收到输入信息,并基于接收到的输入信息维护该数据共享***内的共享数据。为了保证数据共享***内的信息互通,数据共享***中的每个节点之间可以存在信息连接,节点之间可以通过上述信息连接进行信息传输。例如,当数据共享***中的任意节点接收到输入信息时,数据共享***中的其他节点便根据共识算法获取该输入信息,将该输入信息作为共享数据中的数据进行存储,使得数据共享***中全部节点上存储的数据均一致。
对于数据共享***中的每个节点,均具有与其对应的节点标识,而且数据共享***中的每个节点均可以存储有数据共享***中其他节点的节点标识,以便后续根据其他节点的节点标识,将生成的区块广播至数据共享***中的其他节点。每个节点中可维护一个如下表所示的节点标识列表,将节点名称和节点标识对应存储至该节点标识列表中。其中,节点标识可为IP(Internet Protocol,网络之间互联的协议)地址以及其他任一种能够用于标识该节点的信息,表1中仅以IP地址为例进行说明。
表1节点与节点标识对应关系
节点名称 | 节点标识 |
节点1 | 117.114.151.174 |
节点2 | 117.116.189.145 |
… | … |
节点N | 119.123.789.258 |
数据共享***中的每个节点均存储一条相同的区块链。区块链由多个区块组成,参见图11B,区块链由多个区块组成,创始块中包括区块头和区块主体,区块头中存储有输入信息特征值、版本号、时间戳和难度值,区块主体中存储有输入信息;创始块的下一区块以创始块为父区块,下一区块中同样包括区块头和区块主体,区块头中存储有当前区块的输入信息特征值、父区块的区块头特征值、版本号、时间戳和难度值,并以此类推,使得区块链中每个区块中存储的区块数据均与父区块中存储的区块数据存在关联,保证了区块中输入信息的安全性。
在生成区块链中的各个区块时,参见图11C,区块链所在的节点在接收到输入信息时,对输入信息进行校验,完成校验后,将输入信息存储至内存池中,并更新其用于记录输入信息的哈希树;之后,将更新时间戳更新为接收到输入信息的时间,并尝试不同的随机数,多次进行特征值计算,使得计算得到的特征值可以满足下述公式:
SHA256(SHA256(version+prev_hash+merkle_root+ntime+nbits+x))<TARGET
其中,SHA256为计算特征值所用的特征值算法;version(版本号)为区块链中相关区块协议的版本信息;prev_hash为当前区块的父区块的区块头特征值;merkle_root为输入信息的特征值;ntime为更新时间戳的更新时间;nbits为当前难度,在一段时间内为定值,并在超出固定时间段后再次进行确定;x为随机数;TARGET为特征值阈值,该特征值阈值可以根据nbits确定得到。
这样,当计算得到满足上述公式的随机数时,便可将信息对应存储,生成区块头和区块主体,得到当前区块。随后,区块链所在节点根据数据共享***中其他节点的节点标识,将新生成的区块分别发送给其所在的数据共享***中的其他节点,由其他节点对新生成的区块进行校验,并在完成校验后将新生成的区块添加至其存储的区块链中。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (7)
1.一种程序卡顿定位的方法,其特征在于,应用于终端设备,所述终端设备中安装有卡顿定位应用;所述方法包括:
通过所述卡顿定位应用拉取待检测的程序;
获取所述程序的编译版本;
根据所述编译版本反编译执行函数,以得到所述执行函数与函数地址的对应关系,所述函数地址用于指示统计桩的***点;
实时获取程序运行时每个帧的执行函数,所述执行函数用于指示所述程序的运行过程;
根据所述***点将所述统计桩***多个所述执行函数,以得到检测函数;
记录所述检测函数的函数信息和帧信息,所述函数信息包括函数执行耗时和调用关系数据;
若所述函数执行耗时满足预设条件,则确定当前函数执行耗时对应的执行函数为中心函数;
获取在预设范围内的多个波动执行函数;
判断所述多个波动执行函数对应的函数执行耗时是否均大于波动阈值,所述波动阈值对应的数值小于时延阈值对应的数值;
若是,则将所述多个波动执行函数和所述中心函数定位为卡顿发生点,所述预设范围基于所述中心函数确定,所述预设条件基于时延阈值设定。
2.根据权利要求1所述的方法,其特征在于,在定位出卡顿发生点之后,所述方法还包括:
确定所述卡顿发生点对应的卡顿帧;
关联所述卡顿与所述卡顿帧,并上报至服务器,所述服务器用于对所述卡顿发生点进行统计和展示,以得到卡顿原因。
3.根据权利要求2所述的方法,其特征在于,所述关联所述卡顿与所述卡顿帧,并上报至服务器,包括:
关联所述卡顿与所述卡顿帧,并记录对应的函数执行耗时,以获取累计函数执行耗时;
若所述累计函数执行耗时满足上报条件,则上报所述卡顿与所述卡顿帧至服务器。
4.根据权利要求1所述的方法,其特征在于,所述卡顿定位的方法应用于终端设备,所述终端设备为区块链节点中的区块节点设备。
5.一种卡顿定位的装置,其特征在于,应用于终端设备,所述终端设备中安装有卡顿定位应用;所述装置包括:
获取单元,用于通过所述卡顿定位应用拉取待检测的程序;获取所述程序的编译版本;根据所述编译版本反编译执行函数,以得到所述执行函数与函数地址的对应关系,所述函数地址用于指示统计桩的***点;实时获取程序运行时每个帧的执行函数,所述执行函数用于指示所述程序的运行过程;
***单元,用于根据所述***点将所述统计桩***多个所述执行函数,以得到检测函数;
记录单元,用于记录所述检测函数的函数信息和帧信息,所述函数信息包括函数执行耗时和调用关系数据;
定位单元,用于若所述函数执行耗时满足预设条件,则确定当前函数执行耗时对应的执行函数为中心函数;获取在预设范围内的多个波动执行函数;判断所述多个波动执行函数对应的函数执行耗时是否均大于波动阈值,所述波动阈值对应的数值小于时延阈值对应的数值;若是,则将所述多个波动执行函数和所述中心函数定位为卡顿发生点,所述预设范围基于所述中心函数确定,所述预设条件基于时延阈值设定。
6.一种计算机设备,其特征在于,所述计算机设备包括处理器以及存储器:
所述存储器用于存储程序代码;所述处理器用于根据所述程序代码中的指令执行权利要求1至4任一项所述的卡顿定位的方法。
7.一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述权利要求1至4任一项所述的卡顿定位的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911096389.3A CN110865940B (zh) | 2019-11-11 | 2019-11-11 | 一种程序卡顿定位的方法以及相关装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911096389.3A CN110865940B (zh) | 2019-11-11 | 2019-11-11 | 一种程序卡顿定位的方法以及相关装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110865940A CN110865940A (zh) | 2020-03-06 |
CN110865940B true CN110865940B (zh) | 2022-04-05 |
Family
ID=69653908
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911096389.3A Active CN110865940B (zh) | 2019-11-11 | 2019-11-11 | 一种程序卡顿定位的方法以及相关装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110865940B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112527627B (zh) * | 2020-11-02 | 2024-05-10 | 百果园技术(新加坡)有限公司 | 一种页面卡顿检测方法、装置、设备及介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140366007A1 (en) * | 2013-06-06 | 2014-12-11 | Microsoft Corporation | Debugging native code by transitioning from execution in native mode to execution in interpreted mode |
CN106649063A (zh) * | 2016-11-22 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 用于监测程序运行时耗时数据的方法及*** |
CN106681913A (zh) * | 2016-12-08 | 2017-05-17 | 武汉斗鱼网络科技有限公司 | 一种应用卡顿定位***及方法 |
CN109840177A (zh) * | 2017-11-24 | 2019-06-04 | 腾讯科技(深圳)有限公司 | 一种卡顿的处理方法及相关设备 |
-
2019
- 2019-11-11 CN CN201911096389.3A patent/CN110865940B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20140366007A1 (en) * | 2013-06-06 | 2014-12-11 | Microsoft Corporation | Debugging native code by transitioning from execution in native mode to execution in interpreted mode |
CN106649063A (zh) * | 2016-11-22 | 2017-05-10 | 腾讯科技(深圳)有限公司 | 用于监测程序运行时耗时数据的方法及*** |
CN106681913A (zh) * | 2016-12-08 | 2017-05-17 | 武汉斗鱼网络科技有限公司 | 一种应用卡顿定位***及方法 |
CN109840177A (zh) * | 2017-11-24 | 2019-06-04 | 腾讯科技(深圳)有限公司 | 一种卡顿的处理方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN110865940A (zh) | 2020-03-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107943707B (zh) | 行为树的测试方法、装置和存储介质以及终端 | |
CN107967206B (zh) | 一种数据测试***、请求拦截方法以及请求拦截装置 | |
CN109359003B (zh) | 游戏服务器压力测试方法、装置及设备 | |
CN108920370B (zh) | 兼容性问题检测方法、装置及设备 | |
US20150154495A1 (en) | Method, apparatus, and artificial intelligence editor for implementing artificial intelligence behavior | |
CN110825466B (zh) | 一种程序卡顿的处理方法以及卡顿处理装置 | |
CN106970875A (zh) | 虚拟现实软件的帧率测试方法及其*** | |
CN110457200B (zh) | 一种测试用例生成方法及其设备、存储介质、电子设备 | |
CN112631846A (zh) | 一种故障演练方法、装置、计算机设备及存储介质 | |
CN105512562B (zh) | 一种漏洞挖掘方法、装置及电子设备 | |
CN111124911A (zh) | 一种自动化测试方法、装置、设备及可读存储介质 | |
CN111352760A (zh) | 一种数据处理的方法以及相关装置 | |
CN110865940B (zh) | 一种程序卡顿定位的方法以及相关装置 | |
CN111030837A (zh) | 一种网络环境现状评估方法、装置、电子设备及存储介质 | |
CN110339571A (zh) | 事件生成方法和装置、存储介质以及电子装置 | |
CN110221933A (zh) | 代码缺陷辅助修复方法及*** | |
CN111209181A (zh) | 回归测试方法、***、装置以及计算机存储介质 | |
CN110347703B (zh) | 一种基于ARCore的用户行为分析方法及*** | |
CN110365682B (zh) | 一种反作弊方法及装置 | |
CN116796552B (zh) | 一种仿真想定异步协同处理方法及装置 | |
CN110781084B (zh) | 卡顿识别参数确定方法和装置、存储介质及电子装置 | |
CN111797152A (zh) | 一种数据场景的生成方法、装置及计算机设备 | |
CN114003293B (zh) | 接口管理方法、装置、电子设备以及可读存储介质 | |
CN111984519A (zh) | 一种用于业务***的测试方法及其装置 | |
CN115591243A (zh) | 渲染通道的性能检测方法、装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
REG | Reference to a national code |
Ref country code: HK Ref legal event code: DE Ref document number: 40022533 Country of ref document: HK |
|
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |