CN107436832B - 一种动态埋点的方法、装置及电子设备 - Google Patents
一种动态埋点的方法、装置及电子设备 Download PDFInfo
- Publication number
- CN107436832B CN107436832B CN201610366118.5A CN201610366118A CN107436832B CN 107436832 B CN107436832 B CN 107436832B CN 201610366118 A CN201610366118 A CN 201610366118A CN 107436832 B CN107436832 B CN 107436832B
- Authority
- CN
- China
- Prior art keywords
- point
- buried
- embedded
- buried point
- configuration file
- 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/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种动态埋点的方法、装置及电子设备,以及一种埋点设置方法、装置及电子设备。其中,所述动态埋点的方法包括:当程序启动时,获取埋点配置文件,所述埋点配置文件包括各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息;将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理;当特定待埋点方法被调用时,所述埋点处理器截获对所述特定待埋点方法的调用消息,根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理。采用本申请提供的方法,无需编写埋点代码,新增或修改埋点后无需等待程序发版,从而可以有效缩短埋点的生效周期。
Description
技术领域
本申请涉及埋点技术领域,具体涉及一种动态埋点的方法;相应于上述方法,本申请同时涉及一种动态埋点的装置及电子设备,以及一种埋点设置方法、装置及电子设备。
背景技术
用户行为统计(User Behavior Statistics,UBS)一直是移动互联网产品中必不可少的环节,也俗称埋点。埋点的宏观目标是为了获取数据指标来整体上验证产品的业务逻辑是否顺畅。在保证移动端流量不会受较大影响的前提下,通常希望埋点覆盖面越广越好。
在原生应用程序(Native APP)中常用的埋点方案包括:在业务逻辑中加入埋点代码的埋点方案、事件级监控的埋点方案、热修补(hotpatch)方式的埋点方案和方法Hook(即“埋点方法”)的埋点方案。其中,在业务逻辑中加入埋点代码的埋点方案对业务代码入侵大,埋点代码散落在程序各处,缺乏有效管理,更为严重的是各种失真、废弃、过时的埋点可能依然存在于业务代码中,严重影响了业务代码质量;事件级监控的埋点方案功能相对薄弱,只能监控事件级别的埋点;热修补方式的埋点方案采用脚本语言编写埋点代码,埋点代码保存在程序以外的脚本文件中,在程序启动时,需要将下载到本机设备中的脚本文件植入到程序中以实现对程序的埋点,这种方案的优点是:无痕埋点、修改埋点代码后无需重新发布程序,然而,该方案的缺点是:安全性不可控,因此风险较高;方法Hook的埋点方案是将Hook代码和埋点代码统一写在一个独立于业务代码的文件中,并在程序启始时运行该文件中的代码,该方式也实现了无痕埋点,然而,该方案的缺点是:修改埋点代码后需要重新发布程序,因此周期较长。
在上述各种埋点方案中,由于热修补方式的埋点方案和方法Hook的埋点方案均实现了无痕埋点,因此,这两种方案是目前开发人员都在尝试的埋点方案。通过分析可知,虽然热修补方式的埋点方案具有修改埋点代码后无需重新发布程序的优点,但鉴于其存在安全性不可控的问题,因此,为保证程序的安全性,通常采用方法Hook的埋点方案对程序进行埋点。然而,现有技术下方法Hook的埋点方案存在需要编写埋点代码且修改埋点代码后需要重新发布程序的问题。
发明内容
本申请提供一种动态埋点的方法,以解决现有技术下存在需要编写埋点代码且修改埋点代码后需要重新发布程序的问题。本申请还提供一种动态埋点的装置,以及一种电子设备,以及一种埋点设置方法、装置及电子设备。
本申请提供一种动态埋点的方法,包括:
当程序启动时,获取埋点配置文件;所述埋点配置文件包括各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息;
将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理;
当特定待埋点方法被调用时,所述埋点处理器截获对所述特定待埋点方法的调用消息,根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理。
可选的,所述根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理,包括:
根据所述调用消息,获取对所述特定待埋点方法的调用指令;
根据所述调用指令,获取所述特定待埋点方法对应的所述埋点的配置信息;
根据所述埋点的配置信息对所述特定待埋点方法进行埋点。
可选的,所述埋点的配置信息包括埋点类型;
所述根据所述埋点的配置信息对所述特定待埋点方法进行埋点,包括:
获取预先生成的所述埋点的数据对象;所述埋点的数据对象基于所述埋点的配置信息、和所述埋点的所述埋点类型对应的埋点模型类生成;
将所述埋点的数据对象作为所述埋点模型类对应的模型处理类中埋点方法的参数,通过所述模型处理类对所述特定待埋点方法进行埋点。
可选的,在所述获取埋点配置文件之后,还包括:
针对所述埋点配置文件中的各个埋点,根据所述埋点的配置信息、和所述埋点的埋点类型对应的埋点模型类,生成所述埋点的数据对象。
可选的,还包括:
当监听到所述埋点配置文件的更新消息时,读取更新后的埋点配置文件,获取更新后的各个待埋点方法及各个更新后的待埋点方法分别对应的更新后埋点的配置信息;
将各个更新后的待埋点方法分别与预设的埋点处理器进行挂钩处理。
可选的,所述将各个更新后的待埋点方法分别与预设的埋点处理器进行挂钩处理,采用如下方式:
采用增量更新的方式,将各个更新后的待埋点方法分别与预设的埋点处理器进行挂钩处理;
对被删除的待埋点方法进行撤销方法挂钩的处理。
可选的,还包括:
针对各个所述更新后埋点,根据所述更新后埋点的配置信息、和所述更新后埋点的埋点类型对应的埋点模型类,生成所述更新后埋点的数据对象。
可选的,所述埋点配置文件包括是否开启埋点处理的参数项;
在所述将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理之前,还包括:
根据所述埋点配置文件,获取所述是否开启埋点处理的参数项的参数值;
若所述参数值为是,则进入下一步骤。
可选的,还包括:
当监听到所述埋点配置文件的更新消息时,读取更新后的埋点配置文件,获取所述是否开启埋点处理的参数项的参数值;
若所述参数值为否,则对各个已被挂钩的方法进行撤销方法挂钩的处理。
可选的,所述对各个已被挂钩的方法进行撤销方法挂钩的处理,包括:
针对各个所述已被挂钩的方法,将所述已被挂钩的方法与其实现代码重新建立连接,以及断开与所述已被挂钩的方法对应的所述克隆方法与所述实现代码之间的连接;
当已被挂钩的方法所属的类中已无需要挂钩的方法时,断开所述埋点处理器与所述已被挂钩的方法所属的类中用于处理转发调用消息的方法之间的连接。
可选的,将所述待埋点方法与所述埋点处理器进行挂钩处理,包括:
为所述待埋点方法所属的类添加与所述待埋点方法对应的所述克隆方法;
断开所述待埋点方法及其实现代码之间的连接;
将所述埋点处理器作为所述待埋点方法所属的类中用于处理转发调用消息的方法的实现代码。
可选的,所述待埋点方法包括静态方法或实例方法。
可选的,所述方法运行在iOS操作系统下;
所述埋点处理器截获对所述特定待埋点方法的调用消息,采用如下方式:
通过所述特定待埋点方法所属类中的消息重定向方法,将所述调用消息传递给所述埋点处理器。
可选的,所述埋点配置文件包括的埋点的配置信息至少包括埋点名称,以及以下信息的至少一者:埋点类型,埋点位置,自定义参数列表,需执行方法列表。
可选的,所述埋点类型包括:用户点击行为的埋点类型或灰度测试的埋点类型。
可选的,所述埋点的配置信息还包括:埋点的过程属性;所述埋点的过程属性包括:流程开始或流程结束;将具有所述过程属性的埋点作为过程埋点;
所述对所述特定待埋点方法进行埋点处理,采用如下方式:
若当前遇到的过程埋点的所述过程属性为所述流程开始、且不存在已记录的未完成流程监控的过程埋点,则记录该当前遇到的过程埋点为监控流程的起始点,并对该过程埋点及其后的埋点进行关联记录,直至遇到下一个过程埋点时结束埋点的关联记录;
若遇到的下一个过程埋点的所述过程属性为所述流程开始,则将所述遇到的下一个过程埋点作为所述监控流程异常结束的埋点;
若遇到的下一个过程埋点的所述过程属性为所述流程结束,则将所述遇到的下一个过程埋点作为所述监控流程正常结束的埋点;
所述监控流程异常结束的埋点和所述监控流程正常结束的埋点均包括所述监控流程的起始点及其后的埋点。
可选的,所述埋点配置文件以类为组织单位。
可选的,在所述埋点处理器截获对所述特定待埋点方法的调用消息之后,还包括:
根据所述调用消息包括的指令参数,回调所述特定待埋点方法的克隆方法以执行所述特定待埋点方法。
相对应的,本申请还提供一种动态埋点的装置,包括:
埋点配置文件获取单元,用于当程序启动时,获取埋点配置文件;所述埋点配置文件包括各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息;
方法挂钩单元,用于将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理;
埋点处理单元,用于当特定待埋点方法被调用时,所述埋点处理器截获对所述特定待埋点方法的调用消息,根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理。
可选的,所述埋点处理单元包括:
埋点处理子单元,用于根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理;
所述埋点处理子单元包括:
第一获取子单元,用于根据所述调用消息,获取对所述特定待埋点方法的调用指令;
第二获取子单元,用于根据所述调用指令,获取所述特定待埋点方法对应的所述埋点的配置信息;
埋点子单元,用于根据所述埋点的配置信息对所述特定待埋点方法进行埋点。
可选的,所述埋点处理单元还包括:
回调子单元,用于根据所述调用消息包括的指令参数,回调所述特定待埋点方法的克隆方法以执行所述特定待埋点方法。
可选的,还包括:
更新的埋点配置文件读取单元,用于当监听到所述埋点配置文件的更新消息时,读取更新后的埋点配置文件,获取更新后的各个待埋点方法及各个更新后的待埋点方法分别对应的更新后埋点的配置信息;
更新方法挂钩单元,用于将各个更新后的待埋点方法分别与预设的埋点处理器进行挂钩处理。
可选的,所述埋点配置文件包括是否开启埋点处理的参数项;
所述装置还包括:
第一判断单元,用于根据所述埋点配置文件,获取所述是否开启埋点处理的参数项的参数值;若所述参数值为是,则进入下一步骤。
可选的,还包括:
第二判断单元,用于当监听到所述埋点配置文件的更新消息时,读取更新后的埋点配置文件,获取所述是否开启埋点处理的参数项的参数值;若所述参数值为否,则对各个已被挂钩的方法进行撤销方法挂钩的处理。
相对应的,本申请还提供一种电子设备,包括:
显示器;
处理器;以及
存储器,用于存储实现动态埋点的方法的程序,该设备通电并通过所述处理器运行该动态埋点的方法的程序后,执行下述步骤:当程序启动时,获取埋点配置文件;所述埋点配置文件包括各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息;将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理;当特定待埋点方法被调用时,所述埋点处理器截获对所述特定待埋点方法的调用消息,根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理。
相对应的,本申请还提供一种埋点设置方法,包括:
获取特定程序对应的埋点业务需求;
根据所述埋点业务需求,生成所述特定程序对应的埋点配置文件;所述埋点配置文件为所述特定程序提供埋点的配置信息,以便所述特定程序根据所述埋点配置文件提供的所述埋点的配置信息进行动态埋点。
可选的,所述埋点配置文件包括所述特定程序内的各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息。
可选的,所述埋点的配置信息至少包括埋点名称,以及以下信息的至少一者:埋点类型,埋点位置,自定义参数列表,需执行方法列表。
可选的,所述埋点类型包括:用户点击行为的埋点类型或灰度测试的埋点类型。
可选的,所述埋点的配置信息还包括:埋点的过程属性;所述埋点的过程属性包括:流程开始或流程结束;将具有所述过程属性的埋点作为过程埋点。
可选的,所述埋点配置文件以所述特定程序包括的各个类为组织单位,所述特定程序对应多个所述埋点配置文件。
相对应的,本申请还提供一种埋点设置装置,包括:
埋点业务需求获取单元,用于获取特定程序对应的埋点业务需求;
埋点配置文件生成单元,用于根据所述埋点业务需求,生成所述特定程序对应的埋点配置文件;所述埋点配置文件为所述特定程序提供埋点的配置信息,以便所述特定程序根据所述埋点配置文件提供的所述埋点的配置信息进行动态埋点。
相对应的,本申请还提供一种电子设备,包括:
显示器;
处理器;以及
存储器,用于存储实现埋点设置方法的程序,该设备通电并通过所述处理器运行该埋点设置方法的程序后,执行下述步骤:获取特定程序对应的埋点业务需求;根据所述埋点业务需求,生成所述特定程序对应的埋点配置文件;所述埋点配置文件为所述特定程序提供埋点的配置信息,以便所述特定程序根据所述埋点配置文件提供的所述埋点的配置信息进行动态埋点。
与现有技术相比,本申请提供的动态埋点的方法,当程序启动时,获取埋点配置文件,所述埋点配置文件包括各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息;将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理;当特定待埋点方法被调用时,所述埋点处理器截获对所述特定待埋点方法的调用消息,根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理。
使用本申请提供的方法,以埋点配置文件的方式组织管理各个埋点的配置信息,在程序启动时获取埋点配置文件,并对埋点配置文件中的各个待埋点方法进行方法挂钩的处理,使得当待埋点方法被调用时,能够根据待埋点方法对应的埋点配置信息,通过统一的埋点处理器对待埋点方法进行埋点处理;这种处理方式,无需编写埋点代码,新增或修改埋点后无需等待程序发版;因此,本申请提供的方法可以有效缩短埋点的生效周期。
在本申请提供的方法中,通过埋点配置文件对埋点进行集中管理;因此,本申请提供的方法可以有效管理埋点信息。此外,使用本申请提供的方法,由于无需编写埋点代码,埋点工作不再是开发人员的工作,可以由产品人员独立完成;因此,本申请提供的方法可以有效减少开发资源消耗。
使用本申请提供的方法,在程序运行过程中,当监听到埋点配置文件的更新消息时,可以根据更新后的埋点配置文件获取更新后的待埋点方法及更新后埋点的配置信息,然后实时、动态地对更新后的待埋点方法进行方法挂钩处理,并根据更新后埋点的配置信息对更新后的待埋点方法进行埋点处理。这样,可以随时根据新的埋点配置文件对程序进行埋点;因此,本申请提供的方法能够实现埋点的热部署,从而达到即埋即用、埋完就丢的埋点效果。
进一步的,本申请提供的方法还引入了过程埋点,即:标记监控流程开始点的埋点和标记监控流程结束点的埋点,可以统一记录位于标记监控流程开始点的埋点与标记监控流程结束点的埋点之间的所有埋点;因此,本申请提供的方法可以实现对流程的监控。
附图说明
图1是本申请提供的一种动态埋点的方法的实施例的流程图;
图2是本申请提供的一种动态埋点的方法的实施例的埋点配置文件组织结构示意图;
图3是本申请提供的一种动态埋点的方法的实施例的过程埋点示意图;
图4是本申请提供的一种动态埋点的方法的实施例的方法挂钩流程图;
图5是本申请提供的一种动态埋点的方法的实施例的方法调用流程图;
图6是本申请提供的一种动态埋点的方法的实施例的撤销方法挂钩流程图;
图7是本申请提供的一种动态埋点的方法的实施例的架构图;
图8是本申请提供的一种动态埋点的方法的实施例的具体流程图;
图9是本申请提供的一种动态埋点的装置的实施例的示意图;
图10是本申请提供的一种电子设备的实施例的示意图。
图11是本申请提供的一种埋点设置方法的实施例的具体流程图;
图12是本申请提供的一种埋点设置装置的实施例的示意图;
图13是本申请提供的一种电子设备的实施例的示意图。
具体实施方式
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是,本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
在本申请中,提供了一种动态埋点的方法、装置及电子设备,以及一种埋点设置方法、装置及电子设备。在下面的实施例中逐一进行详细说明。
本申请提供的动态埋点的方法,其核心的基本思想为:以埋点配置文件的方式组织管理埋点的配置信息,在程序启动时获取埋点配置文件,并对埋点配置文件中的待埋点方法进行方法挂钩的处理;当待埋点方法被调用时,能够根据待埋点方法对应的埋点配置信息,通过统一的埋点处理器对待埋点方法进行埋点处理。由于统一在埋点配置文件中管理埋点,无需编写埋点代码,因此,新增或修改埋点后无需等待程序发版。
为了便于理解本申请的技术方案,首先对方法挂钩(Hook)技术作简要说明。方法挂钩技术,就是截获方法调用的技术,在对一个方法调用之前先执行预设的其它程序片段(如:埋点处理),根据需要可以再执行缺省的方法或者进行其他处理。例如,在Objective-C中调用一个方法,其实是向一个对象发送消息,查找消息的唯一依据是selector的名字;利用Objective-C的动态特性,可以实现在运行时偷换selector对应的方法实现,达到给方法挂钩的目的;每个类都有一个方法列表,存放着selector的名字和方法实现的映射关系;IMP类似函数指针,指向具体的方法实现。
请参考图1,其为本申请的动态埋点的方法实施例的流程图。所述方法包括如下步骤:
步骤S101:当程序启动时,获取埋点配置文件。
本申请提供的方法是基于方法Hook来完成埋点的,因此,所述埋点配置文件包括需要进行埋点处理的方法(即:待埋点方法)的方法名、待埋点方法所属的类名、及各个待埋点方法分别对应的埋点的配置信息。
所述埋点配置文件通常存储在为所述程序提供服务的服务器中,例如,配置文件服务器等。当程序启动时,可向管理所述埋点配置文件的服务器发送网络请求,以获取埋点配置文件。
所述埋点配置文件可以为XML(Extensible Markup Language,可扩展标记语言)格式的文件或JSON(JavaScript Object Notation,轻量级的数据交换格式)格式的文件等。由于JSON格式具有数据可读性较强、可扩展性较强、编码难度较低、解码难度较低、数据体积较小、传输速度较快等优点,因此,采用JSON格式组织埋点配置文件是一种优选的方案。
获取到埋点配置文件后,即可对其进行解析,从埋点配置文件中解析出各个待埋点方法及各个待埋点方法分别对应的埋点的配置信息。所述待埋点方法包括但不限于:静态方法或实例方法。
在实际应用中,如果仅需对实例方法进行埋点,则可直接采用开源的aspects方法Hook工具类对待埋点方法进行方法挂钩即可;如果需要对静态方法进行埋点,则可Hook该静态方法对应类的原类,以完成静态方法的挂钩,进而对静态方法进行埋点。
请参考图2,其为本申请的动态埋点的方法实施例的埋点配置文件组织结构示意图。在本实施例中,以类为单位管理埋点配置文件,即各个类对应各自的埋点配置文件。采用以类为单位的埋点配置文件管理模式,如果某个类具有埋点,就为该类创建一个埋点配置文件,以后该类所有的埋点都在该文件中进行配置。当一个类的埋点发生变更时,仅需修改该类的埋点配置文件,避免对其他类的埋点配置文件产生影响。
通过这种以类为单位的配置文件管理方式,可以很好的解决现有技术下埋点记录分散、混乱的现状,并为日后埋点情况排查、重用和修改打下了良好基础。
所述埋点配置文件包括的埋点的配置信息至少包括埋点名称,以及以下信息的至少一者:埋点类型,埋点位置,自定义参数列表,需执行方法列表等。由于可在配置文件中设置埋点的各种配置信息,因此,使得修改埋点的工作不再有任何门槛,开发人员得到了解放,产品人员可直接配置埋点。
所述埋点名称,也称为事件名称,用于对程序运行过程中产生的实际埋点数据进行标记。所述自定义参数列表,用于对调用待埋点方法时的实际调用参数值进行标记。所述埋点位置包括方法执行前或方法执行后。
本申请提供的方法是基于方法Hook来完成埋点的,因此,埋点能直接获取的程序运行信息就被限定在被Hook方法的参数内。在实际应用中,仅获取方法内的信息无法满足所有的实际应用需求,因此,本申请提供的方法提出了动态参数的概念以扩大实际埋点数据的获取范围。
动态参数是通过在埋点配置文件中加入需执行方法列表的方式引入的。当程序执行到具有动态参数的埋点时,会依次执行指定的方法(即:需执行方法列表中的各个方法),并将方法的返回值作为实际埋点数据的组成部分。例如,为某个类的refreshUI:方法的一个埋点添加了reason动态参数,该参数的参数值是refreshReason方法的返回值,则refreshReason方法即为所述需执行方法。
所述埋点类型包括但不限于:用户点击行为的埋点类型或灰度测试的埋点类型,随着埋点需求的变化,还会出现其它的埋点类型,例如,程序监控的埋点类型等。如果某个埋点的埋点类型为所述用户点击行为的埋点类型,则表示该埋点用于统计用户行为;如果某个埋点的埋点类型为所述灰度测试的埋点类型,则表示该埋点用于灰度发布程序的测试。
上述类型的埋点可称为离散埋点,即:不具有上下文的埋点。本申请提供的方法,除了支持上述普通的离散埋点,还支持具有上下文的过程埋点,例如,标记监控流程起始点的埋点或标记监控流程终止点的埋点。
过程埋点的主要思想为:将待监控流程的起始埋点的埋点过程属性设置为流程开始(如:begin),将待监控流程的终止埋点的埋点过程属性设置为流程结束(如:end)。当程序执行过程中遇到标记为begin的埋点时,表示开始一次新的过程埋点;接下来,当遇到end或再次遇到begin埋点时,表示此次过程埋点结束,具体的,若遇到end埋点则表示待监控流程正常结束,若遇到begin埋点则表示待监控流程异常结束;最后,根据待监控流程是否正常结束,会分别埋流程监控成功(如:processTrackSuccess)或埋流程监控失败(如:processTrackFail_{失败原因})两类埋点,这两类埋点都会带上该过程中遇到的所有埋点,由此实现过程埋点的功能。
在具体实施时,所述对所述特定待埋点方法进行埋点处理,可采用如下方式:1)若当前遇到的过程埋点的所述过程属性为所述流程开始、且不存在已记录的未完成流程监控的过程埋点,则记录该当前遇到的过程埋点为监控流程的起始点,并对该过程埋点及其后的埋点进行关联记录,直至遇到下一个过程埋点时结束埋点的关联记录;2)若遇到的下一个过程埋点的所述过程属性为所述流程开始,则将所述遇到的下一个过程埋点作为所述监控流程异常结束的埋点;若遇到的下一个过程埋点的所述埋点的过程属性为所述流程结束,则将所述遇到的埋点作为所述监控流程正常结束的埋点。所述监控流程异常结束的埋点和所述监控流程正常结束的埋点均包括所述监控流程的起始点及其后的埋点。
请参考图3,其为本申请的动态埋点的方法实施例的过程埋点示意图。由图3可见,Begin 0至End 3.1的是一个运行正常的流程,Begin 0至Begin 3.2是一个运行异常的流程。在实际应用中,通过过程埋点不仅可以掌握用户操作/浏览轨迹,还能主动发现测试中未能及时发现的bug。
在程序启动过程中,通过步骤S101获取埋点配置文件后,就可以进入下一步骤对埋点配置文件中的各个待埋点方法进行方法挂钩的处理。
步骤S103:将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理。
所述埋点处理器,也可称为挂钩中心(Hook中心),埋点处理器主要提供两个功能:1)执行方法挂钩和撤销方法挂钩;2)截获被Hook方法的调用,完成埋点处理和待埋点方法的回调处理。
在具体实施时,将所述待埋点方法与所述埋点处理器进行挂钩处理,可包括如下步骤:1)为所述待埋点方法所属的类添加与所述待埋点方法对应的克隆方法;2)断开所述待埋点方法及其实现代码之间的连接;3)将所述埋点处理器作为所述待埋点方法所属的类中用于处理转发调用消息的方法的实现代码。
请参考图4,其为本申请的动态埋点的方法实施例的方法挂钩流程图。下面结合图4,以iOS操作系统为例对上述方法挂钩的具体步骤进行说明。由图4可见,对viewDidLoad方法进行方法Hook的处理过程如下所述:
Step1:给类A添加一个viewDidLoad_copy方法(即:所述克隆方法,具体实施时克隆方法名可任意设定),其imp的值与viewDidLoad方法的imp相同,即两个方法指向同一段实现代码。
Step2:清空viewDidLoad方法的imp,即:以后调用viewDidLoad方法,会走转发流程,即forwardInvocation方法。
Step3:将forwardInvocation方法的imp设置为hookCenter(即:埋点处理器)的imp,即以后调用forwardInvocation方法,执行的实际上都是hookCenter方法。
图4所示的forwardInvocation方法,即为:类A的用于处理转发调用消息的方法,该方法也称为消息重定向方法。当调用viewDidLoad方法时,由于无法查找到其实现代码,因此系统将发起一个转发调用消息,该转发调用消息包括一个封装了对viewDidLoad方法的调用指令和指令参数的对象;forwardInvocation方法接收到该消息后,将该消息传递给hookCenter,然后由hookCenter根据该消息对viewDidLoad方法进行埋点。
上述步骤S101和步骤S103是在程序启动阶段完成的,经过这两个步骤的处理即完成了对各个待埋点方法的挂钩处理。各个待埋点方法被Hook后,在程序运行过程中,如果调用了某个被Hook的待埋点方法,则进入步骤S105,通过步骤S105对该被调用方法进行埋点处理。
步骤S105:当特定待埋点方法被调用时,所述埋点处理器截获对所述特定待埋点方法的调用消息,根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理。
由于待埋点方法均被进行了Hook处理,因此,当某个待埋点方法被调用时,系统将无法查找到其指向的实现代码,此时,系统将会发送一个转发调用消息。所述转发调用消息包括一个封装了调用指令和指令参数的对象。埋点处理器截获到对该待埋点方法的调用消息后,将根据该待埋点方法对应的埋点配置信息对该待埋点方法进行埋点处理。
在具体实施时,对所述特定待埋点方法进行埋点处理的步骤,可包括如下具体步骤:1)根据所述调用消息,获取对所述特定待埋点方法的调用指令;2)根据所述调用指令,获取所述特定待埋点方法对应的所述埋点的配置信息;3)根据所述埋点的配置信息对所述特定待埋点方法进行埋点。
在上述第2)步骤中,由所述调用指令即可确定被调用方法的方法名,然后根据被调用方法的方法名,即可获取需要在被调用方法中进行埋点的各个埋点的配置信息。
获取到各个埋点的配置信息后,可根据埋点类型和埋点的配置信息为各个埋点生成对应的埋点数据对象(埋点数据实例),以供所述埋点处理器所用。可为不同的埋点需求设置不同的埋点类型,不同的埋点类型对应不同的模型处理类,具有不同的埋点处理逻辑。不同的模型处理类对不同埋点模型类的实例(埋点数据实例)进行埋点处理。
在具体实施时,上述第3)步骤所述的根据所述埋点的配置信息对所述特定待埋点方法进行埋点,可包括如下具体步骤:3.1)获取预先生成的所述埋点的数据对象;所述埋点的数据对象基于所述埋点的配置信息、和所述埋点的所述埋点类型对应的埋点模型类生成;3.2)将所述埋点的对象作为所述埋点模型类对应的模型处理类的埋点方法的参数,通过所述模型处理类将所述埋点埋在所述特定待埋点方法中。
需要说明的是,为了提高程序的运行效率、减少对资源的消耗,可在程序启动时即生成各个埋点的数据对象。因此,本申请提供的方法,在程序启动阶段获取埋点配置文件之后,还可包括如下步骤:针对所述埋点配置文件中的各个埋点,根据所述埋点的配置信息、和所述埋点的埋点类型对应的埋点模型类,生成所述埋点的数据对象。采用这种方式仅需根据埋点的配置信息,生成一次埋点的数据对象,因此,可以减少对资源的消耗,由此提高了程序的运行效率。
此外,还需要注意的是,所述埋点处理器截获到对特定待埋点方法的调用消息之后,将根据该待埋点方法对应的埋点配置信息中的埋点位置信息,确定先执行该方法再对该方法进行埋点处理,还是先对该方法进行埋点再执行该方法。在执行特定待埋点方法时,实际上是根据所述调用消息包括的指令参数,回调特定待埋点方法的克隆方法以执行特定待埋点方法。
请参考图5,其为本申请的动态埋点的方法实施例的方法调用流程图。由图5可见,对viewDidLoad方法进行调用的处理过程如下所述:
Step1:当调用ViewDidLoad时,由于查不到其实现代码,因此,就会进入转发流程。
Step2:系统的转发流程会调用至forwardInvocation方法。
Step3:当调用forwardInvocation方法时,实际执行的是hookCenter方法。
Step4:hookCenter会处理埋点,然后再回调ViewDidLoad_copy方法去执行真正的ViewDidLoad代码。
在实际应用中,为了能够达到埋点热部署的技术效果,还可在程序运行过程中对埋点配置文件的变化进行监听,当监听到埋点配置文件的更新消息时,本申请提供的方法还包括如下步骤:1)读取更新后的埋点配置文件,获取更新后的各个待埋点方法及各个更新后的待埋点方法分别对应的更新后埋点的配置信息;2)将各个更新后的待埋点方法分别与预设的埋点处理器进行挂钩处理。
采用这种处理方式,可实现动态Hook更新后的待埋点方法的功能。这样,可以随时根据新的埋点配置文件对程序进行埋点,从而达到即埋即用、埋完就丢的埋点效果。
在具体实施时,对更新后的待埋点方法进行方法Hook处理的步骤,可采用增量更新的方式进行,例如,对新增的待埋点方法进行方法Hook处理;对于发生变更的待埋点方法,可先对其进行撤销方法Hook的处理,再对其重新进行方法Hook的处理。此外,还需要对被删除的待埋点方法进行撤销方法Hook的处理。
请参考图6,其为本申请的动态埋点的方法实施例的撤销方法挂钩流程图。下面结合图6,以iOS操作系统为例对上述撤销方法挂钩的具体步骤进行说明。由图6可见,对viewDidLoad方法进行撤销方法Hook的处理过程如下所述:
Step1:将ViewDidLoad_copy:方法的imp赋值给ViewDidLoad,恢复ViewDidLoad:方法。
Step2:清空ViewDidLoad_copy:方法的imp,由于iOS操作系统runtime机制没有清空的操作,所以实际是设置为转发,即本类无法处理。
Step3:如果该类已经没有其他Hook的方法,断开forwardInvocation:方法和hookCenter:方法之间的关联。
当监听到埋点配置文件的更新消息时,不仅需要对所述更新后的待埋点方法进行方法Hook处理,还需要根据更新后埋点的配置信息,更新相应的埋点数据对象。
在本实施例中,根据更新后埋点的配置信息更新相应的埋点数据对象,可包括如下步骤:针对各个所述更新后埋点,根据所述更新后埋点的配置信息、和所述更新后埋点的埋点类型对应的埋点模型类,生成所述更新后埋点的数据对象。
此外,为了能够对程序是否埋点进行统一的开启/关闭控制,所述埋点配置文件还可包括是否开启埋点处理的参数项;如果该参数项的值为否,则表示无需对程序进行埋点处理,正常执行程序即可,因此无需对方法进行挂钩处理;如果该参数项的值为是,则表示需要对程序进行埋点处理,在程序启动阶段需要对方法进行挂钩处理。
因此,本申请提供的方法,在所述将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理之前,还包括如下步骤:根据所述埋点配置文件,获取所述是否开启埋点处理的参数项的参数值;若所述参数值为是,则进入下一步骤,即获取待埋点方法列表及其后的各个步骤。
在程序运行过程中,当监听到所述埋点配置文件的更新消息时,同样需要根据更新后的埋点配置文件获取所述是否开启埋点处理的参数项的参数值;若所述参数值为否,则需要对各个已被Hook的方法进行撤销方法挂钩的处理;若所述参数值为是,则根据更新后的埋点配置文件对待埋点方法进行方法挂钩处理。
在具体实施时,对各个已被Hook的方法进行撤销方法挂钩的处理,可包括如下步骤:1)针对各个所述已被挂钩的方法,将所述已被挂钩的方法与其实现代码重新建立连接,以及断开与所述已被挂钩的方法对应的所述克隆方法及所述实现代码之间的连接;2)当已被挂钩的方法所属的类中已无需要挂钩的方法时,断开所述埋点处理器与所述已被挂钩的方法所属的类中用于处理转发调用消息的方法之间的连接。
请参考图7,其为本申请的动态埋点的方法实施例的架构图。在本实施例中,动态埋点方案的整体架构,主要包括以下部分:引擎(Engine),配置(Config),埋点处理器MethodTracker(hookCenter),埋点模型(model)及模型处理类(modelHandler)。
在图7中,MethodTrack支持多种类型的埋点,例如,用户行为统计类型的埋点、灰度发布测试类型的埋点等。每种类型的埋点都会对应一种model和使用该model为数据源的modelHandler。配置(Config)负责解析配置中心下发的埋点配置文件,根据埋点类型产生对应的model数据对象,并提供model到modelHandler的映射关系。MethodTracker(hookCenter)主要提供两个功能:1)执行方法Hook和撤销方法Hook;2)截获被Hook方法的调用,完成埋点和回调的处理。引擎(Engine)负责在“程序启动”和“配置文件更新”时操作Config解析配置文件,并把解析完的数据交由MethodTracker进行处理。
请参考图8,其为本申请的动态埋点的方法实施例的具体流程图。如图所示,本实施例的具体处理流程主要分为以下三个阶段:
1)系统启动(程序启动)阶段
1.1 当系统启动时,Engine会操作Config模块完成埋点配置文件的读取和解析,生成相应的model数据对象;
1.2 Engine将model传给MethodTracker,MethodTracker利用model中的信息,Hook相应的方法并保存埋点信息。
2)配置更新阶段
2.1 当Engine监听到配置更新的消息后,会操作Config模块重新读取和解析埋点配置文件。
2.2 Engine根据新的model列表和已有的model列表做匹配,采用增量更新的方式,修改和新增埋点数据及其对应的方法。
2.3 Engine操作MethodTracker撤销未在新model列表中出现的埋点及其对应的方法。
3)方法调用阶段
3.1 当被Hook的方法被调用时,实际执行的都是MethodTracker中的hookCenter方法。在此方法中,首先会解析传给被Hook方法的调用参数。
3.2 然后将调用参数及model信息传给ModelHandler进行处理,并埋点。
3.3 HookCenter获取被Hook方法真正的实现,并调用。
在实际应用中,对基于图7所示架构图的动态埋点技术方案,可将其封装为一个框架(framework),该框架可对外只暴露一个文件,以达到便于接入方接入的效果。例如,该文件可只有以下两个方法:+(DTrackEngine*)sharedInstance;//@return已注册数据更新监听事件的单例-(void)reloadConfig:(BOOL)isFirstLoad;//重新读取埋点配置文件对于上述封装好的框架,接入方只需要在程序启动时,添加如下一行代码即可:[[DTrackEnginesharedInstance]reloadConfig:YES]。
在上述的实施例中,提供了一种动态埋点的方法,与之相对应的,本申请还提供一种动态埋点的装置。该装置是与上述方法的实施例相对应。
请参看图9,其为本申请的动态埋点的装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种动态埋点的装置,包括:
埋点配置文件获取单元101,用于当程序启动时,获取埋点配置文件;所述埋点配置文件包括各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息;
方法挂钩单元103,用于将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理;
埋点处理单元105,用于当特定待埋点方法被调用时,所述埋点处理器截获对所述特定待埋点方法的调用消息,根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理。
可选的,所述埋点处理单元105包括:
埋点处理子单元,用于根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理;
所述埋点处理子单元105包括:
第一获取子单元,用于根据所述调用消息,获取对所述特定待埋点方法的调用指令;
第二获取子单元,用于根据所述调用指令,获取所述特定待埋点方法对应的所述埋点的配置信息;
埋点子单元,用于根据所述埋点的配置信息对所述特定待埋点方法进行埋点。
可选的,所述埋点处理单元105还包括:
回调子单元,用于根据所述调用消息包括的指令参数,回调所述特定待埋点方法的克隆方法以执行所述特定待埋点方法。
可选的,还包括:
更新的埋点配置文件读取单元,用于当监听到所述埋点配置文件的更新消息时,读取更新后的埋点配置文件,获取更新后的各个待埋点方法及各个更新后的待埋点方法分别对应的更新后埋点的配置信息;
更新方法挂钩单元,用于将各个更新后的待埋点方法分别与预设的埋点处理器进行挂钩处理。
可选的,所述埋点配置文件包括是否开启埋点处理的参数项;
所述装置还包括:
第一判断单元,用于根据所述埋点配置文件,获取所述是否开启埋点处理的参数项的参数值;若所述参数值为是,则进入下一步骤。
可选的,还包括:
第二判断单元,用于当监听到所述埋点配置文件的更新消息时,读取更新后的埋点配置文件,获取所述是否开启埋点处理的参数项的参数值;若所述参数值为否,则对各个已被挂钩的方法进行撤销方法挂钩的处理。
请参考图10,其为本申请的电子设备实施例的示意图。由于设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的设备实施例仅仅是示意性的。
本实施例的一种电子设备,该电子设备包括:显示器101;处理器102;以及存储器103,用于存储实现动态埋点的方法的程序,该设备通电并通过所述处理器运行该动态埋点的方法的程序后,执行下述步骤:当程序启动时,获取埋点配置文件;所述埋点配置文件包括各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息;将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理;当特定待埋点方法被调用时,所述埋点处理器截获对所述特定待埋点方法的调用消息,根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理。
本申请提供的动态埋点的方法,当程序启动时,获取埋点配置文件,所述埋点配置文件包括各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息;将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理;当特定待埋点方法被调用时,所述埋点处理器截获对所述特定待埋点方法的调用消息,根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理。采用本申请提供的方法,无需编写埋点代码,新增或修改埋点后无需等待程序发版,从而达到缩短埋点生效周期的效果。
与上述的方法相对应,本申请还提供一种埋点设置方法。下面首先对现有技术下的埋点设置方法及其存在的问题作简要说明。
目前,对程序进行埋点设置主要是通过编写埋点代码的方式实现的。这种设置埋点的方式具有一定的技术门槛,使得对程序进行埋点设置的工作严重依赖于程序开发人员,产品人员通常无法直接为程序设置埋点。
请参考图11,其为本申请提供的一种埋点设置方法实施例的流程图,本实施例与第一实施例内容相同的部分不再赘述,请参见实施例一中的相应部分。本申请提供的一种埋点设置方法包括:
步骤S101:获取特定程序对应的埋点业务需求。
不同的程序对应不同的埋点业务需求。所述埋点业务需求包括但不限于:需要在其所对应的程序中进行埋点的埋点位置、埋点类型等信息,如表1所示:
序号 | 程序 | 埋点位置 | 埋点类型 |
1 | 程序A | 功能1执行前 | 用户点击行为 |
2 | 程序A | 功能3执行后 | 用户点击行为 |
3 | 程序A | 功能6执行后 | 灰度测试 |
… | … |
表1、埋点业务需求表
从表1可以获知:需要在程序A的功能1执行之前进行埋点处理、在程序A的功能3执行之后进行埋点处理、在程序A的功能6执行之后进行埋点处理等埋点业务需求。
在具体实施时,本步骤可通过从用户界面中提取埋点业务需求的方式、或者通过从如表1所示的埋点业务需求表中提取埋点业务需求的方式实现。如果通过从用户界面中提取埋点业务需求的方式实现,则配置人员需要首先在用户界面中可输入各种埋点业务需求。
获取到特定程序对应的埋点业务需求后,就可以进入下一步骤根据埋点业务需求,生成特定程序对应的埋点配置文件。
步骤S103:根据所述埋点业务需求,生成所述特定程序对应的埋点配置文件。
所述埋点配置文件是一种易于程序解析的、包括形式化的埋点业务需求的文件。所述埋点配置文件可以为XML(Extensible Markup Language,可扩展标记语言)格式的文件或JSON(JavaScript Object Notation,轻量级的数据交换格式)格式的文件等。
所述埋点配置文件为所述特定程序提供埋点的配置信息(即:形式化的埋点业务需求),以便所述特定程序根据所述埋点配置文件提供的所述埋点的配置信息进行动态埋点。
本步骤实现根据埋点业务需求生成特定程序对应的埋点配置文件的功能。在具体实施时,可首先对埋点业务需求进行解析,以获取各种埋点的设置信息,例如,从表1中可解析出埋点位置、埋点类型等信息;然后,再将各种埋点的设置信息形式化,例如,若表1中“功能1”对应程序A内的类A中方法X,则“功能1”可形式化为“类A中方法X”的方法名;最后,将各种形式化的埋点的设置信息形成埋点配置文件。
以表1为例,若功能1对应程序A内的类A中方法X、功能3对应程序A内的类B中方法Y、功能6对应程序A内的类C中方法Z,则程序A对应的埋点配置文件代码可如下所示:
在具体实施时,所述埋点配置文件可包括所述特定程序内的各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息。
所述埋点的配置信息至少包括埋点名称,以及以下信息的至少一者:埋点类型,埋点位置,自定义参数列表,需执行方法列表。
所述埋点类型包括:用户点击行为的埋点类型或灰度测试的埋点类型。
所述埋点的配置信息还包括:埋点的过程属性;所述埋点的过程属性包括:流程开始或流程结束;将具有所述过程属性的埋点作为过程埋点。
需要注意的是,在实际应用中,所述埋点配置文件可以所述特定程序包括的各个类为组织单位,即:所述特定程序可对应多个所述埋点配置文件,不同类可对应不同的所述埋点配置文件。
在上述的实施例中,提供了一种埋点设置方法,与之相对应的,本申请还提供一种埋点设置装置。该装置是与上述方法的实施例相对应。
请参看图12,其为本申请的埋点设置装置实施例的示意图。由于装置实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。
本实施例的一种埋点设置装置,包括:
埋点业务需求获取单元101,用于获取特定程序对应的埋点业务需求;
埋点配置文件生成单元103,用于根据所述埋点业务需求,生成所述特定程序对应的埋点配置文件;所述埋点配置文件为所述特定程序提供埋点的配置信息,以便所述特定程序根据所述埋点配置文件提供的所述埋点的配置信息进行动态埋点。
请参考图13,其为本申请的电子设备实施例的示意图。由于设备实施例基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的设备实施例仅仅是示意性的。
本实施例的一种电子设备,该电子设备包括:显示器101;处理器102;以及存储器103,用于存储实现埋点设置方法的程序,该设备通电并通过所述处理器运行该埋点设置方法的程序后,执行下述步骤:获取特定程序对应的埋点业务需求;根据所述埋点业务需求,生成所述特定程序对应的埋点配置文件;所述埋点配置文件为所述特定程序提供埋点的配置信息,以便所述特定程序根据所述埋点配置文件提供的所述埋点的配置信息进行动态埋点。
本申请提供的埋点设置方法,通过获取特定程序对应的埋点业务需求,再根据所述埋点业务需求,生成所述特定程序对应的埋点配置文件;所述埋点配置文件为所述特定程序提供埋点的配置信息,以便所述特定程序根据所述埋点配置文件提供的所述埋点的配置信息进行动态埋点。采用本申请提供的方法,无需编写埋点代码,埋点工作不再是开发人员的工作,可以由产品人员独立完成,从而达到有效减少开发资源消耗、提高埋点配置效率的效果。
本申请虽然以较佳实施例公开如上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和修改,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
Claims (25)
1.一种动态埋点的方法,其特征在于,包括:
当程序启动时,获取埋点配置文件;所述埋点配置文件包括各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息;
将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理;
当特定待埋点方法被调用时,所述埋点处理器截获对所述特定待埋点方法的调用消息,根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理。
2.根据权利要求1所述的动态埋点的方法,其特征在于,所述根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理,包括:
根据所述调用消息,获取对所述特定待埋点方法的调用指令;
根据所述调用指令,获取所述特定待埋点方法对应的所述埋点的配置信息;
根据所述埋点的配置信息对所述特定待埋点方法进行埋点。
3.根据权利要求2所述的动态埋点的方法,其特征在于:
所述埋点的配置信息包括埋点类型;
所述根据所述埋点的配置信息对所述特定待埋点方法进行埋点,包括:
获取预先生成的所述埋点的数据对象;所述埋点的数据对象基于所述埋点的配置信息、和所述埋点的所述埋点类型对应的埋点模型类生成;
将所述埋点的数据对象作为所述埋点模型类对应的模型处理类中埋点方法的参数,通过所述模型处理类对所述特定待埋点方法进行埋点。
4.根据权利要求1所述的动态埋点的方法,其特征在于,在所述获取埋点配置文件之后,还包括:
针对所述埋点配置文件中的各个埋点,根据所述埋点的配置信息、和所述埋点的埋点类型对应的埋点模型类,生成所述埋点的数据对象。
5.根据权利要求1所述的动态埋点的方法,其特征在于,还包括:
当监听到所述埋点配置文件的更新消息时,读取更新后的埋点配置文件,获取更新后的各个待埋点方法及各个更新后的待埋点方法分别对应的更新后埋点的配置信息;
将各个更新后的待埋点方法分别与预设的埋点处理器进行挂钩处理。
6.根据权利要求5所述的动态埋点的方法,其特征在于,所述将各个更新后的待埋点方法分别与预设的埋点处理器进行挂钩处理,采用如下方式:
采用增量更新的方式,将各个更新后的待埋点方法分别与预设的埋点处理器进行挂钩处理;
对被删除的待埋点方法进行撤销方法挂钩的处理。
7.根据权利要求5所述的动态埋点的方法,其特征在于,还包括:
针对各个所述更新后埋点,根据所述更新后埋点的配置信息、和所述更新后埋点的埋点类型对应的埋点模型类,生成所述更新后埋点的数据对象。
8.根据权利要求1所述的动态埋点的方法,其特征在于:
所述埋点配置文件包括是否开启埋点处理的参数项;
在所述将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理之前,还包括:
根据所述埋点配置文件,获取所述是否开启埋点处理的参数项的参数值;
若所述参数值为是,则进入下一步骤。
9.根据权利要求8所述的动态埋点的方法,其特征在于,还包括:
当监听到所述埋点配置文件的更新消息时,读取更新后的埋点配置文件,获取所述是否开启埋点处理的参数项的参数值;
若所述参数值为否,则对各个已被挂钩的方法进行撤销方法挂钩的处理。
10.根据权利要求9所述的动态埋点的方法,其特征在于,所述对各个已被挂钩的方法进行撤销方法挂钩的处理,包括:
针对各个所述已被挂钩的方法,将所述已被挂钩的方法与其实现代码重新建立连接,以及断开与所述已被挂钩的方法对应的克隆方法与所述实现代码之间的连接;
当已被挂钩的方法所属的类中已无需要挂钩的方法时,断开所述埋点处理器与所述已被挂钩的方法所属的类中用于处理转发调用消息的方法之间的连接。
11.根据权利要求1所述的动态埋点的方法,其特征在于,将所述待埋点方法与所述埋点处理器进行挂钩处理,包括:
为所述待埋点方法所属的类添加与所述待埋点方法对应的克隆方法;
断开所述待埋点方法及其实现代码之间的连接;
将所述埋点处理器作为所述待埋点方法所属的类中用于处理转发调用消息的方法的实现代码。
12.根据权利要求1所述的动态埋点的方法,其特征在于,所述待埋点方法包括静态方法或实例方法。
13.根据权利要求1所述的动态埋点的方法,其特征在于:
所述方法运行在iOS操作系统下;
所述埋点处理器截获对所述特定待埋点方法的调用消息,采用如下方式:
通过所述特定待埋点方法所属类中的消息重定向方法,将所述调用消息传递给所述埋点处理器。
14.根据权利要求1所述的动态埋点的方法,其特征在于,所述埋点配置文件包括的埋点的配置信息至少包括埋点名称,以及以下信息的至少一者:埋点类型,埋点位置,自定义参数列表,需执行方法列表。
15.根据权利要求14所述的动态埋点的方法,其特征在于,所述埋点类型包括:用户点击行为的埋点类型或灰度测试的埋点类型。
16.根据权利要求14所述的动态埋点的方法,其特征在于,所述埋点的配置信息还包括:埋点的过程属性;所述埋点的过程属性包括:流程开始或流程结束;将具有所述过程属性的埋点作为过程埋点;
所述对所述特定待埋点方法进行埋点处理,采用如下方式:
若当前遇到的过程埋点的所述过程属性为所述流程开始、且不存在已记录的未完成流程监控的过程埋点,则记录该当前遇到的过程埋点为监控流程的起始点,并对该过程埋点及其后的埋点进行关联记录,直至遇到下一个过程埋点时结束埋点的关联记录;
若遇到的下一个过程埋点的所述过程属性为所述流程开始,则将所述遇到的下一个过程埋点作为所述监控流程异常结束的埋点;
若遇到的下一个过程埋点的所述过程属性为所述流程结束,则将所述遇到的下一个过程埋点作为所述监控流程正常结束的埋点;
所述监控流程异常结束的埋点和所述监控流程正常结束的埋点均包括所述监控流程的起始点及其后的埋点。
17.根据权利要求1所述的动态埋点的方法,其特征在于,所述埋点配置文件以类为组织单位。
18.根据权利要求1所述的动态埋点的方法,其特征在于,在所述埋点处理器截获对所述特定待埋点方法的调用消息之后,还包括:
根据所述调用消息包括的指令参数,回调所述特定待埋点方法的克隆方法以执行所述特定待埋点方法。
19.一种动态埋点的装置,其特征在于,包括:
埋点配置文件获取单元,用于当程序启动时,获取埋点配置文件;所述埋点配置文件包括各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息;
方法挂钩单元,用于将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理;
埋点处理单元,用于当特定待埋点方法被调用时,所述埋点处理器截获对所述特定待埋点方法的调用消息,根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理。
20.一种电子设备,其特征在于,包括:
显示器;
处理器;以及
存储器,用于存储实现动态埋点的方法的程序,该设备通电并通过所述处理器运行该动态埋点的方法的程序后,执行下述步骤:当程序启动时,获取埋点配置文件;所述埋点配置文件包括各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息;将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理;当特定待埋点方法被调用时,所述埋点处理器截获对所述特定待埋点方法的调用消息,根据所述特定待埋点方法对应的所述埋点的配置信息对所述特定待埋点方法进行埋点处理。
21.一种埋点设置方法,其特征在于,包括:
获取特定程序对应的埋点业务需求;
根据所述埋点业务需求,生成所述特定程序对应的埋点配置文件;所述埋点配置文件为所述特定程序提供埋点的配置信息,以便所述特定程序根据所述埋点配置文件提供的所述埋点的配置信息进行动态埋点,其中,所述配置信息包括埋点名称和至少还包括埋点类型、埋点位置、自定义参数列表、需执行方法表其中的一个;
将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理,其中,所述挂钩处理包括:为所述待埋点方法所属的类添加与所述待埋点方法对应的克隆方法;断开所述待埋点方法及其实现代码之间的连接;将所述埋点处理器作为所述待埋点方法所属的类中用于处理转发调用消息的方法的实现代码。
22.根据权利要求21所述的埋点设置方法,其特征在于,所述埋点配置文件包括所述特定程序内的各个待埋点方法及所述各个待埋点方法分别对应的埋点的配置信息。
23.根据权利要求21所述的埋点设置方法,其特征在于,所述埋点的配置信息还包括:埋点的过程属性;所述埋点的过程属性包括:流程开始或流程结束;将具有所述过程属性的埋点作为过程埋点。
24.一种埋点设置装置,其特征在于,包括:
埋点业务需求获取单元,用于获取特定程序对应的埋点业务需求;
埋点配置文件生成单元,用于根据所述埋点业务需求,生成所述特定程序对应的埋点配置文件;所述埋点配置文件为所述特定程序提供埋点的配置信息,以便所述特定程序根据所述埋点配置文件提供的所述埋点的配置信息进行动态埋点,其中,所述配置信息包括埋点名称和至少还包括埋点类型、埋点位置、自定义参数列表、需执行方法表其中的一个;
方法挂钩单元,将所述埋点配置文件中的各个待埋点方法分别与预设的埋点处理器进行挂钩处理,其中,所述挂钩处理包括:为所述待埋点方法所属的类添加与所述待埋点方法对应的克隆方法;断开所述待埋点方法及其实现代码之间的连接;将所述埋点处理器作为所述待埋点方法所属的类中用于处理转发调用消息的方法的实现代码。
25.一种电子设备,其特征在于,包括:
显示器;
处理器;以及
存储器,用于存储实现埋点设置方法的程序,该设备通电并通过所述处理器运行该埋点设置方法的程序后,执行下述步骤:获取特定程序对应的埋点业务需求;根据所述埋点业务需求,生成所述特定程序对应的埋点配置文件;所述埋点配置文件为所述特定程序提供埋点的配置信息,以便所述特定程序根据所述埋点配置文件提供的所述埋点的配置信息进行动态埋点,其中,所述配置信息包括埋点名称和至少还包括埋点类型、埋点位置、自定义参数列表、需执行方法表其中的一个;
将所述埋点配置文件中的待埋点方法与埋点处理器进行挂钩处理,包括:为所述待埋点方法所属的类添加与所述待埋点方法对应的克隆方法;断开所述待埋点方法及其实现代码之间的连接;将所述埋点处理器作为所述待埋点方法所属的类中用于处理转发调用消息的方法的实现代码。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610366118.5A CN107436832B (zh) | 2016-05-27 | 2016-05-27 | 一种动态埋点的方法、装置及电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610366118.5A CN107436832B (zh) | 2016-05-27 | 2016-05-27 | 一种动态埋点的方法、装置及电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107436832A CN107436832A (zh) | 2017-12-05 |
CN107436832B true CN107436832B (zh) | 2020-11-27 |
Family
ID=60454569
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610366118.5A Active CN107436832B (zh) | 2016-05-27 | 2016-05-27 | 一种动态埋点的方法、装置及电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107436832B (zh) |
Families Citing this family (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108255993A (zh) * | 2017-12-29 | 2018-07-06 | 北京三快在线科技有限公司 | 提取业务字段的方法、装置、电子设备及存储介质 |
CN108459940B (zh) * | 2018-01-16 | 2021-06-18 | 北京奇艺世纪科技有限公司 | 应用性能管理系统的配置信息修改方法、装置及电子设备 |
CN108762962A (zh) * | 2018-05-18 | 2018-11-06 | 网易宝有限公司 | 防止应用异常的方法和装置、存储介质及电子设备 |
CN108809763B (zh) * | 2018-06-14 | 2022-03-25 | 武汉斗鱼网络科技有限公司 | 一种网络性能参数采集方法、终端装置及存储介质 |
CN108966041B (zh) * | 2018-07-18 | 2020-10-20 | 创新先进技术有限公司 | 一种音视频播放埋点方法、装置、设备、计算机可读存储介质 |
CN109508186A (zh) * | 2018-09-18 | 2019-03-22 | 众安信息技术服务有限公司 | 一种基于iOS可视化埋点的数据采集分析方法及系统 |
CN109542529B (zh) * | 2018-10-26 | 2022-04-05 | 深圳壹账通智能科技有限公司 | 基于函数名称的埋点方法、装置、计算机设备及存储介质 |
CN109918276B (zh) * | 2019-01-22 | 2022-11-29 | 深圳壹账通智能科技有限公司 | 基于app应用程序的曝光埋点处理方法及相关设备 |
CN110099101A (zh) * | 2019-04-01 | 2019-08-06 | 厦门美柚信息科技有限公司 | 一种埋点动态设置的方法、系统、设备及其存储介质 |
CN112015614B (zh) * | 2019-05-31 | 2024-05-28 | 北京字节跳动网络技术有限公司 | 埋点处理方法、装置及电子设备 |
CN111813648A (zh) * | 2019-06-03 | 2020-10-23 | 北京嘀嘀无限科技发展有限公司 | 一种应用于App的自动化测试方法、装置、存储介质及电子设备 |
CN112148292A (zh) * | 2019-06-28 | 2020-12-29 | 北京京东尚科信息技术有限公司 | 优化应用程序的代码的方法、装置、系统及介质 |
CN110442502B (zh) * | 2019-07-23 | 2021-12-31 | 北京三快在线科技有限公司 | 一种埋点的方法、装置、设备及存储介质 |
CN110704028A (zh) * | 2019-09-02 | 2020-01-17 | 深圳壹账通智能科技有限公司 | 埋点统计方法、电子装置及计算机设备 |
CN113127336A (zh) * | 2020-01-16 | 2021-07-16 | 北京沃东天骏信息技术有限公司 | 数据收集方法和装置 |
CN112433921A (zh) * | 2020-06-03 | 2021-03-02 | 上海哔哩哔哩科技有限公司 | 用于动态埋点的方法及设备 |
CN111913741B (zh) * | 2020-08-31 | 2023-12-15 | 杭州网易智企科技有限公司 | 对象拦截方法、装置、介质及电子设备 |
CN111930422B (zh) * | 2020-09-02 | 2023-07-25 | 度小满科技(北京)有限公司 | 一种信息采集方法、装置、服务器及存储介质 |
CN112015467B (zh) * | 2020-09-04 | 2024-05-17 | 杭州网易再顾科技有限公司 | 埋点方法、介质、装置和计算设备 |
CN112256701A (zh) * | 2020-10-22 | 2021-01-22 | 广东万唯计算机服务有限公司 | 一种动态埋点数据采集系统及其使用方法 |
CN112685262A (zh) * | 2021-01-05 | 2021-04-20 | 上海中通吉网络技术有限公司 | 基于日志的iOS应用程序埋点采集方法及装置 |
CN113641345A (zh) * | 2021-08-13 | 2021-11-12 | 网易(杭州)网络有限公司 | 基于映射配置的埋点方法、装置、电子设备和存储介质 |
CN115098187A (zh) * | 2022-06-23 | 2022-09-23 | 浙江中控信息产业股份有限公司 | 插件化授权检查埋点方法、装置、电子设备及存储介质 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104572043B (zh) * | 2013-10-16 | 2018-01-19 | 阿里巴巴集团控股有限公司 | 一种对客户端应用的控件进行实时埋点的方法及装置 |
WO2016076899A1 (en) * | 2014-11-14 | 2016-05-19 | Medidata Solutions, Inc. | System and method for determining subject conditions in mobile health clinical trials |
CN104915398B (zh) * | 2015-05-29 | 2019-01-29 | 北京京东尚科信息技术有限公司 | 一种网页埋点的方法及装置 |
-
2016
- 2016-05-27 CN CN201610366118.5A patent/CN107436832B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN107436832A (zh) | 2017-12-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107436832B (zh) | 一种动态埋点的方法、装置及电子设备 | |
CN111124906B (zh) | 基于动态埋点的跟踪方法、编译方法、装置和电子设备 | |
US7770154B2 (en) | Lightweight highly available infrastructure to trace program execution | |
US8719784B2 (en) | Assigning runtime artifacts to software components | |
CN103970659B (zh) | 基于插桩技术的安卓应用软件自动化测试方法 | |
CN108255708B (zh) | 测试环境中访问生产文件的方法、装置、存储介质及设备 | |
CN104932973A (zh) | 一种版本兼容测试方法和装置 | |
CN109977670A (zh) | 基于插件加载的安卓应用安全监测方法、存储介质 | |
US20130179867A1 (en) | Program Code Analysis System | |
CN103186463B (zh) | 确定软件的测试范围的方法和系统 | |
CN106648564A (zh) | 一种用于采集业务数据的方法和装置 | |
CN107741891B (zh) | 对象的析构方法、介质、装置和计算设备 | |
CN105095087A (zh) | 一种基于权限操作的软件测试系统和方法 | |
CN113094238A (zh) | 一种业务系统异常监控方法及装置 | |
CN112445692B (zh) | 一种用例测试方法及终端 | |
CN109542444A (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
CN114416545A (zh) | 确定测试代码覆盖率的方法、装置和电子设备 | |
CN116974581B (zh) | 代码生成方法、装置、电子设备和存储介质 | |
CN116467204A (zh) | 一种低代码应用运行稳定性优化方法 | |
CN109684846A (zh) | 一种文件提取方法及装置 | |
CN111813880B (zh) | 一种国土空间规划项目管理方法、系统及存储介质 | |
US8321844B2 (en) | Providing registration of a communication | |
US8977901B1 (en) | Generating service call patterns for systems under test | |
CN112000366B (zh) | 基于代码生成器的系统参数配置方法及装置 | |
CN102902825B (zh) | 一种数据库优化方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |