[发明专利]一种程序卡顿定位的方法以及相关装置有效
申请号: | 201911096389.3 | 申请日: | 2019-11-11 |
公开(公告)号: | CN110865940B | 公开(公告)日: | 2022-04-05 |
发明(设计)人: | 彭斌;魏学峰;严明;周洪斌;徐宇挺;程景;刘俊辉 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 深圳市深佳知识产权代理事务所(普通合伙) 44285 | 代理人: | 吴磊 |
地址: | 518057 广东省深圳*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 程序 定位 方法 以及 相关 装置 | ||
本申请公开了一种卡顿定位的方法以及相关装置,通过实时获取程序运行时每个帧的执行函数,并将统计桩插入执行函数中的多个执行函数中,以得到检测函数;然后记录所述检测函数的函数信息,以确定函数执行耗时;当函数执行耗时满足预设条件时,则定位所述检测函数中对应的执行函数为卡顿发生点。从而实现了对于程序运行过程中卡顿点的确定过程,该过程不需要获取大量的数据,就可以准确定位卡顿帧的函数执行耗时和相关数据,占用资源少,提高了定位过程的稳定性,且对于终端硬件要求低,具有良好的适用范围。
技术领域
本申请涉及计算机技术领域,尤其涉及一种程序卡顿定位的方法以及相关装置。
背景技术
随着移动终端相关技术的发展,越来越多的智能设备出现在人们的生活中,其中,游戏是一种主要的终端应用程序,人们需要实时的掌握游戏运行过程中的运行状态以做出优化,保证游戏运行顺畅。
目前,在安卓手机的Unity3D的IL2CPP版本在卡顿定位上是采用profile工具实现,这类实现方式必须编译时选择development Build,此版本主要用于前期的调试和测试用,其中主要实现原理在编译中引擎插入了很多性能统计代码,方便提取内存/CPU/GPU等的性能,此统计数据是各个纬度的全量信息进行统计。当使用development版本时,在电脑端启动profiler工具,profiler工具或通过USB或者ip连接development版本,development版本会将统计每帧数据源源不断的发送给profiler工具。为统计程序的运行状态以确定卡顿原因,需要获取的数据包含较多,如:每帧的CPU利用率、内存使用情况、函数执行耗时、drawcall数等。
但是,上述确定卡顿原因的过程中涉及的数据量较大,需要加入很多调试脚本,占用终端处理器的资源,对于终端的硬件要求较高,影响卡顿定位过程的稳定性及可适用性。
发明内容
有鉴于此,本申请第一方面提供一种卡顿定位的方法,可应用于静态数据库的系统或程序过程中,具体包括:实时获取程序运行时每个帧的执行函数,所述执行函数用于指示所述程序的运行过程;
将统计桩插入多个所述执行函数,以得到检测函数;
记录所述检测函数的函数信息和帧信息,所述函数信息包括函数执行耗时和调用关系数据;
若所述函数执行耗时满足预设条件,则定位所述检测函数中对应的帧信息为卡顿发生点,所述预设条件基于时延阈值设定。
优选的,在本申请一些可能的实现方式中,所述实时获取程序运行时每个帧的执行函数之前,所述方法还包括:
获取所述程序的编译版本;
根据所述编译版本反编译所述执行函数,以得到所述执行函数与函数地址的对应关系,所述函数地址用于指示所述统计桩的插入点;
所述将统计桩插入多个所述执行函数,以得到检测函数,包括:
根据所述插入点将所述统计桩插入多个所述执行函数,以得到所述检测函数。
优选的,在本申请一些可能的实现方式中,所述若所述函数执行耗时满足预设条件,则定位所述检测函数中对应的帧信息为卡顿发生点,包括:
若所述卡顿时长满足预设条件,则确定当前卡顿时长对应的执行函数为中心函数;
获取在预设范围内的多个波动执行函数对应的帧信息,以定位为所述卡顿发生点,所述预设范围基于所述中心函数确定。
优选的,在本申请一些可能的实现方式中,所述获取在预设范围内的多个波动执行函数对应的帧信息,以定位为所述卡顿发生点,包括:
获取在所述预设范围内的多个波动执行函数;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201911096389.3/2.html,转载请声明来源钻瓜专利网。