数据获取方法、装置、电子设备及计算机可读存储介质制造方法及图纸

技术编号:21891110 阅读:30 留言:0更新日期:2019-08-17 14:12
本发明专利技术提供了一种数据获取方法、装置、电子设备、计算机可读存储介质,该方法包括:根据应用程序的预设配置文件,识别所述应用程序中待监测的目标字节码、以及所述目标字节码中待监测的目标方法;将预设插桩代码转换为字节码形式的目标插桩代码;调用预设插桩接口,在所述目标方法中内部逻辑代码的前后插入所述目标插桩代码,其中,所述目标插桩代码用于获取所述目标方法的耗时数据。本发明专利技术降低了业务代码与插桩代码的耦合性、降低了代码维护成本,并提升了耗时数据的采集效率。

Data acquisition methods, devices, electronic devices and computer-readable storage media

【技术实现步骤摘要】
数据获取方法、装置、电子设备及计算机可读存储介质
本专利技术涉及计算机
,特别是涉及一种数据获取方法、装置、电子设备及计算机可读存储介质。
技术介绍
在程序开发或应用过程中,需要对程序的性能进行不断优化,优化的性能参数中特别重要的一点是程序的运行速度。那么为了监控程序中各个代码的耗时时间,目前主要通过在程序开发阶段,开发人员手动在程序源代码中针对每个方法分别预埋能够采集耗时时间的代码,然后,将预埋代码的程序源代码进行编译,生成字节码文件,最后对字节码文件打包,生成程序的安装文件。在将安装文件运行后,能够在程序运行过程中利用预埋的代码对待监测的代码进行耗时统计,以便对耗时较长的代码进行优化。但是,这种通过预埋耗时时间采集代码的方式来进行耗时统计的方案,只能在代码开发阶段进行代码预埋,并且需要人工的逐个对每个待耗时统计的目标代码来预埋耗时时间采集代码,存在着耗时时间的采集效率较低的问题;另外,如果需要调整预埋代码,则需要对程序中的每个预埋代码逐个进行重复的修改,并重新进行编译、打包等操作,即程序需要重新进行一次完整的开发流程,显然,这会造成代码的维护成本较高;此外,耗时时间采集代码由于在开发阶段预埋至程序源代码中,这也会造成耗时时间采集代码与程序的业务代码的耦合性较强的问题。
技术实现思路
本专利技术提供了一种数据获取方法、装置、电子设备及计算机可读存储介质,以解决相关技术中的耗时数据采集方案所存在的数据采集效率低、采集代码与业务代码耦合性强、代码维护成本高的问题。为了解决上述问题,根据本专利技术的一个方面,本专利技术公开了一种数据获取方法,包括:根据应用程序的预设配置文件,识别所述应用程序中待监测的目标字节码、以及所述目标字节码中待监测的目标方法;将预设插桩代码转换为字节码形式的目标插桩代码;调用预设插桩接口,在所述目标方法中内部逻辑代码的前后插入所述目标插桩代码,其中,所述目标插桩代码用于获取所述目标方法的耗时数据。根据本专利技术的另一方面,本专利技术还公开了一种数据获取装置,包括:识别模块,用于根据应用程序的预设配置文件,识别所述应用程序中待监测的目标字节码、以及所述目标字节码中待监测的目标方法;转换模块,用于将预设插桩代码转换为字节码形式的目标插桩代码;插入模块,用于调用预设插桩接口,在所述目标方法中内部逻辑代码的前后插入所述目标插桩代码,其中,所述目标插桩代码用于获取所述目标方法的耗时数据。根据本专利技术的又一方面,本专利技术还公开了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的数据获取程序,所述数据获取程序被所述处理器执行时实现如上述任意一项所述的数据获取方法的步骤。根据本专利技术的再一方面,本专利技术还公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有数据获取程序,所述数据获取程序被处理器执行时实现如上述任意一项所述的数据获取方法中的步骤。与现有技术相比,本专利技术包括以下优点:本专利技术实施例的方法在应用程序编译阶段,将预设插桩代码对应的字节码形式的目标插桩代码,插入至目标字节码的目标方法中,以便于目标插桩代码对该目标方法获取耗时数据,而非在程序开发阶段预埋用于获取耗时数据的代码,从而降低了业务代码与插桩代码的耦合性;此外,本专利技术实施例的方法基于应用程序的预设配置文件,来识别需要插桩的对象(即目标字节码中的目标方法),使得被插桩的对象在预设配置文件中是可配置的,以及基于预设插桩代码来获取目标插桩代码,使得插桩代码也是可配置的。那么当需要调整对插桩对象或者插桩代码时,则只需要对预设配置文件、预设插桩代码中的信息进行调整即可,无需对应用程序的代码作任何调整,从而降低了代码维护成本;另外,为了达到对目标方法获取耗时数据的目的,只需要利用预设插桩代码和预设配置文件,来对已编译完成的应用程序做进一步的代码插入处理即可,无需在开发阶段对应用程序中的每个插桩对象逐个采用手工预埋的方式来插入用于采集耗时数据的插桩代码,从而大幅提升了耗时数据的采集效率。附图说明图1是本专利技术的一种数据获取方法实施例的步骤流程图;图2是本专利技术的另一种数据获取方法实施例的步骤流程图;图3是本专利技术的又一种数据获取方法实施例的步骤流程图;图4是本专利技术的再一种数据获取方法实施例的步骤流程图;图5是本专利技术的再一种数据获取方法实施例的步骤流程图;图6示出了本专利技术的一个应用程序实施例的架构图;图7是本专利技术的一种数据获取装置实施例的结构框图。具体实施方式为使本专利技术的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本专利技术作进一步详细的说明。为了获取应用程序中开发人员关注的代码的耗时数据,本专利技术提供了一种数据获取方法,该方法可以应用于应用程序编译生成字节码文件之后的阶段中,如图1所示,本专利技术实施例的方法可以对应用程序编译生成的字节码文件进行插桩处理,在插桩时,可以调用预设插桩接口,来将预设插桩代码插入至开发人员感兴趣的目标字节码文件中的目标方法的内部,从而便于该预设插桩代码来对该目标方法的执行耗时时长数据来进行采集。在插桩处理之后,就可以对应用程序的字节码文件(包括插入预设插桩代码的字节码文件)进行打包,生成插桩后的应用程序的安装文件;然后运行该安装文件,那么当该目标方法被调用而执行时,则该目标方法内部的预设插桩代码也会被运行,从而可以获取该目标方法的耗时数据并输出。图2~图5以及相关的可选实施例详细描述了图1中的插桩处理步骤,具体可以参照下文的相关描述。参照图2,示出了本专利技术的一种数据获取方法实施例的步骤流程图,具体可以包括如下步骤:步骤101,根据应用程序的预设配置文件,识别所述应用程序中待监测的目标字节码、以及所述目标字节码中待监测的目标方法;其中,在应用程序的源代码编译生成字节码文件后,本专利技术实施例的方法可以根据该应用程序的预设配置文件,来识别应用程序的多个字节码文件中待监测耗时数据的目标字节码文件,以及该目标字节码文件中待监测耗时数据的目标方法。其中,该目标方法可以是目标字节码文件中的部分或全部方法,本专利技术对此不做限制,目标方法具体属于目标字节码文件中的哪个方法均是可配置的。在一个示例中,该预设配置文件可以记录目标字节码的标识信息(例如类名、字节码文件名称)、目标方法的标识信息(例如方法名),因此,基于该预设配置文件可以识别需要对哪个字节码中的哪个方法来获取耗时数据。另外,该预设配置文件中的信息都是可配置的,因此,用户可以根据获取耗时数据的需求,来灵活的在预设配置文件中配置相应目标方法以及目标方法所属的目标字节码的信息,以便于本专利技术实施例的方法对相应的目标方法去获取其耗时数据,以便为应用程序的代码优化提供参考依据。可选地,若检测到应用程序的源代码编译生成字节码,则执行所述步骤101。在一个示例中,应用程序以Java语言编写,编写的各个Java文件在编译后可以生成Class(类)文件,Java文件中的每个类可以生成一个Class文件,因此,编译后的Java文件可以对应有多个Class文件;本专利技术实施例的方法可以基于该预设配置文件来从多个Class文件中识别出待监测的目标Class文件,以及目标Class文件中待监测的目标方法。步骤102,将预设插桩代码转换为字节码形式的目标插桩代码;其中,预设插桩代码可以用于对本文档来自技高网...

【技术保护点】
1.一种数据获取方法,其特征在于,包括:根据应用程序的预设配置文件,识别所述应用程序中待监测的目标字节码、以及所述目标字节码中待监测的目标方法;将预设插桩代码转换为字节码形式的目标插桩代码;调用预设插桩接口,在所述目标方法中内部逻辑代码的前后插入所述目标插桩代码,其中,所述目标插桩代码用于获取所述目标方法的耗时数据。

【技术特征摘要】
1.一种数据获取方法,其特征在于,包括:根据应用程序的预设配置文件,识别所述应用程序中待监测的目标字节码、以及所述目标字节码中待监测的目标方法;将预设插桩代码转换为字节码形式的目标插桩代码;调用预设插桩接口,在所述目标方法中内部逻辑代码的前后插入所述目标插桩代码,其中,所述目标插桩代码用于获取所述目标方法的耗时数据。2.根据权利要求1所述的方法,其特征在于,所述根据应用程序的预设配置文件,识别所述应用程序中待监测的目标字节码、以及所述目标字节码中待监测的目标方法,包括:根据应用程序的预设配置文件中的字节码筛选参数,对所述应用程序的字节码进行筛选,识别与所述字节码筛选参数匹配的目标字节码,其中,所述字节码筛选参数包括以下至少之一:项目名、包名、类名;根据所述预设配置文件中的方法参数,对所述目标字节码中的方法进行筛选,识别所述目标字节码中的目标方法。3.根据权利要求2所述的方法,其特征在于,所述根据所述预设配置文件中的方法参数,对所述目标字节码中的方法进行筛选,识别所述目标字节码中的目标方法,包括:若目标字节码中存在与所述预设配置文件中的方法参数相匹配的目标方法,则识别所述目标方法;若目标字节码中不存在与所述预设配置文件中的方法参数相匹配的目标方法,则将所述目标字节码中的每个方法识别为目标方法。4.根据权利要求2所述的方法,其特征在于,若所述预设配置文件还包括黑名单,则所述根据应用程序的预设配置文件,识别所述应用程序中待监测的目标字节码、以及所述目标字节码中待监测的目标方法,还包括:根据所述黑名单,对筛选后的所述目标字节码进行过滤,得到待监测的目标字节码;根据所述黑名单,对过滤后的目标字节码中的所述目标方法进行过滤,得到待监测的目标方法。5.根据权利要求1所述的方法,其特征在于,所述目标插桩代码包括第一插桩代码和第二插桩代码,所述调用预设插桩接口,在所述目标方法中内部逻辑代码的前后插入所述目标插桩代码,包括:调用预设插桩接口,在所述目标方法中内部逻辑代码之前插入所述第一插桩代码,在所述目标方法中内部逻辑代码之后插入所述第二插桩代码;其中,所述第一插桩代码用于采集时间信息,并将所述时间信息传递至所述第二插桩代码;所述第二插桩代码用于采集时间信息,并计算采集的时间信息与接收自所述第一插桩代码的时间信息的时间差值,其中,所述时间差值为所述目标方法的耗时数据。6.根据权利要求5所述的方法,其特征在于,所述第一插桩代码和所述第二插桩代码采集的时间信息对应的时间类型包括以下至少之一:CPU时间、系统时间、时钟时间。7.根据权利要求5所述的方法,其特征在于,所述调用预设插桩接口,在所述目标方法中内部逻辑代码的前后插入所述目标插桩代码之后,所述方法还包括:在所述应用程序运行过程中,当所述目标方法被触发时,则依次执行所述第一插桩代码、所述内部逻辑代码和所述第二插桩代码,以获取所述第二插桩代码输出的所述目标方法的耗时数据。8.根据权利要求7所述的方法,其特征在于,所述在所述应用程序运行过程中,当所述目标方法被触发时,则依次执行所述第一插桩代码、所述内部逻辑代码和所述第二插桩代码,以获取所述第二插桩代码输出的所述目标方法的耗时数据之后,所述方法还包括:若所述预设配置文件包括预设时长区间,则在多个目标方法中筛选出耗时数据在所述预设时长区间内的目标方法;输出筛选得到的所述目标方法、以及与筛选得到的所述目标方法匹配的耗时数据。9.根据权利要求1所述的方法,其特征在于,所述目标插桩代码还用于获取线程信息,其中,所述线程信息为所述目标方法占用的目标线程的信息。10.根据权利要求9所述的方法,其特征在于,所述调用预设插桩接口,在所述目标方法中内部逻辑代码的前后插入所述目标插桩代码之后,所述方法还包括:在所述应用程序运行过程中,当所述目标方法被触发时,运行所述目标插桩代码,以获取所述目标插桩代码输出的所述目标方法占用的目标线程的信息;若所述应用程序的预设配置文件包括预设线程信息,则在多个目标方法中筛选出占用的目标线程的信息与所述预设线程信息匹配的目标方法;输出筛选得到的所述目标方法、以及与筛选得到的所述目标方法匹配的耗时数据。11.根据权利要求1所述的方法,其特征在于,所述调用预设插桩接口,在所述目标方法中内部逻辑代码的前后插入所述目标插桩代码,其中,所述目标插桩代码用于获取所述目标方法的耗时数据之后,所述方法还包括:将所述应用程序中的每个字节码进行打包处理,生成插桩后的所述应用程序的安装文件;根据所述安装文件运行插桩后的所述应用程序。12.根据权利要求1所述的方法,其特征在于,所述根据应用程序的预设配置文件,识别所述应用程序中待监测的目标字节码、以及所述目标字节码中待监测的目标方法,包括:若检测到应用程序的源代码编译生成字节码,则根据应用程序的预设配置文件,识别所述字节码中待监测的目标字节...

【专利技术属性】
技术研发人员:蔡敏明田胜军
申请(专利权)人:北京奇艺世纪科技有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1