[发明专利]iOS系统中应用程序的运行信息确定方法、装置有效
申请号: | 201811512388.8 | 申请日: | 2018-12-11 |
公开(公告)号: | CN109783161B | 公开(公告)日: | 2020-08-04 |
发明(设计)人: | 徐臻;吴君阳;王志宇 | 申请(专利权)人: | 北京三快在线科技有限公司 |
主分类号: | G06F9/448 | 分类号: | G06F9/448 |
代理公司: | 北京润泽恒知识产权代理有限公司 11319 | 代理人: | 莎日娜 |
地址: | 100083 北京市海*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | ios 系统 应用程序 运行 信息 确定 方法 装置 | ||
本发明提供了iOS系统中应用程序的运行信息确定方法、装置,该iOS系统中设置有多个线程,所述线程包含至少一个方法对象,所述方法包括:当所述应用程序通过预设入口函数,调用所述线程中任一所述方法对象时,拦截所述预设入口函数,并替换为目标函数;当所述目标函数在所述方法对象中运行时,获取所述方法对象的运行状态,并在所述堆栈器中写入和读取所述运行状态,根据在所述堆栈器中的写入和读取的时间,生成所述方法对象的运行时间;所述目标函数通过所述运行时间,确定所述方法对象在所述线程中的调用关系,以及,所述线程的运行时间,最终确定所述应用程序的运行信息。解决了现有应用程序运行信息获取方法侵入性高且不可持续维护的问题。
技术领域
本发明涉及机器学习技术领域,特别是涉及一种iOS系统中应用程序的运行信息确定方法、一种iOS系统中应用程序的运行信息确定装置、设备及可读存储介质。
背景技术
在移动应用的开发过程中,可能会遇到一些性能瓶颈,例如程序运行的卡顿或内存无法正确的释放,都无法得到很好的监控或反馈。通常在针对统计Objective-C语言程序的方法调用信息(包括方法调用关系、调用次数以及执行时间等),对于分析验证程序运行逻辑、优化运行性能都有很大的意义。目前普遍可采用的解决方案是直接在代码层面的指定方法前后插入记录代码,或者使用官方提供的Instrument分析工具进行分析。
但是上述方法仅可覆盖有限的事先预见的代码,不可能做到全面覆盖,对源代码的侵入性高,无法直接处理二进制,并且人力成本高,利用Instrument分析工具分析,对系统依赖性高,不具备持续可维护性,应用效果不理想。
发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种iOS系统中应用程序的运行信息确定方法和相应的一种iOS系统中应用程序的运行信息确定装置。
根据本发明的第一方面,本发明实施例公开了一种iOS系统中应用程序的运行信息确定方法,上述iOS系统中设置有多个线程,所述线程包含至少一个方法对象,具体包括:
当所述应用程序通过预设入口函数,调用所述线程中任一所述方法对象时,拦截所述预设入口函数;
将所述预设入口函数替换为目标函数;
当所述目标函数在所述方法对象中运行时,获取所述方法对象的运行状态;
所述目标函数构建堆栈器,在所述堆栈器中写入和读取所述运行状态;
所述目标函数根据所述运行状态在所述堆栈器中的写入和读取的时间,生成所述方法对象的运行时间;
所述目标函数通过所述方法对象的运行时间,确定所述方法对象在所述线程中的调用关系,以及,所述线程的运行时间;
所述目标函数根据所述方法对象在所述线程中的调用关系,以及,所述线程的运行时间,确定所述应用程序的运行信息。
根据本发明的第二方面,本发明实施例公开了一种iOS系统中应用程序的运行信息确定装置,上述iOS系统中设置有多个线程,所述线程包含至少一个方法对象,具体包括:
入口函数拦截模块,用于当所述应用程序通过预设入口函数,调用所述线程中任一所述方法对象时,拦截所述预设入口函数;
入口函数替换模块,用于将所述预设入口函数替换为目标函数;
运行状态获取模块,用于当所述目标函数在所述方法对象中运行时,获取所述方法对象的运行状态;
堆栈器构建模块,用于所述目标函数构建堆栈器,在所述堆栈器中写入和读取所述运行状态;
方法对象运行时间生成模块,用于所述目标函数根据所述运行状态在所述堆栈器中的写入和读取的时间,生成所述方法对象的运行时间;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京三快在线科技有限公司,未经北京三快在线科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201811512388.8/2.html,转载请声明来源钻瓜专利网。