掌桥专利:专业的专利平台
掌桥专利
首页

埋点检测方法、装置、电子设备及存储介质

文献发布时间:2023-06-19 12:10:19


埋点检测方法、装置、电子设备及存储介质

技术领域

本公开涉及计算机技术领域,尤其涉及一种埋点检测方法、装置、电子设备及存储介质。

背景技术

埋点是一种常用的数据采集方法,在进行数据采集时,需要在业务代码中写入与某一业务代码段对应的埋点代码段,利用埋点代码段采集该业务代码段运行时产生的业务数据。但是,随着业务代码的不断更新,一些业务代码段或者埋点代码段可能会被误删,导致埋点失效。相关技术中,会由开发人员人工检测业务代码中的埋点是否有效,但是会消耗人力和时间,埋点检测的效率较低。

发明内容

本公开提供了一种埋点检测方法、装置、电子设备及存储介质,能够提高埋点检测的效率。

根据本公开实施例的第一方面,提供一种埋点检测方法,包括:

在指令集合中,检测与每个目标指令信息关联的切面指令信息,以及检测与每个所述切面指令信息关联的目标指令信息,其中所述目标指令信息为待埋点的指令信息,所述切面指令信息为用于埋点的指令信息,所述目标指令信息与所述切面指令信息关联是指所述切面指令信息用于采集所述目标指令信息在运行时产生的数据;

响应于所述指令集合中的每个所述目标指令信息均存在关联的所述切面指令信息,且每个所述切面指令信息均存在关联的所述目标指令信息,输出第一检测结果,所述第一检测结果用于表示所述指令集合的埋点有效。

可选地,所述检测与每个目标指令信息关联的切面指令信息,包括:

检测包括第一标记的每个指令信息,将检测到的指令信息确定为所述目标指令信息,所述第一标记用于识别所述第一标记所在的指令信息为所述目标指令信息;

检测与每个所述目标指令信息关联的,且包括第二标记的指令信息,将检测到的指令信息确定为所述切面指令信息,所述第二标记用于识别所述第二标记所在的指令信息为所述切面指令信息。

可选地,所述检测与每个所述目标指令信息关联的,且包括第二标记的指令信息,将检测到的指令信息确定为所述切面指令信息,包括:

对于检测到的每个所述目标指令信息,获取所述目标指令信息对应的指令标识,所述指令标识为所述目标指令信息的唯一标识;

检测包括所述第二标记和切点指令的指令信息,将检测到的指令信息确定为所述切面指令信息,其中所述切点指令包括所述指令标识和切点标记,所述切点标记用于指示所述切面指令信息与所述指令标识对应的所述目标指令信息关联。

可选地,所述检测包括所述第二标记和切点指令的指令信息,将检测到的指令信息确定为所述切面指令信息,包括:

在所述指令集合中检测包括所述第二标记、所述切点指令和数据采集指令的指令信息,将检测到的指令信息确定为所述切面指令信息,所述切点标记还用于指示将所述数据采集指令添加至所述指令标识对应的所述目标指令信息中,以采集所述目标指令信息运行时产生的数据。

可选地,所述指令标识包括所述目标指令信息所在的目标类对应的类标识和所述目标指令信息所属的方法对应的方法标识,所述切点标记包括类标记和方法标记,所述切点指令包括添加有所述类标记的所述类标识以及添加有所述方法标记的所述方法标识。

可选地,所述检测与每个所述切面指令信息关联的目标指令信息,包括:

检测包括所述第二标记的每个指令信息,将检测到的指令信息确定为所述切面指令信息;

检测与每个所述切面指令信息关联的,且包括所述第一标记的指令信息,将检测到的指令信息确定为所述目标指令信息。

可选地,所述检测与每个所述切面指令信息关联的,且包括所述第一标记的指令信息,将检测到的指令信息确定为所述目标指令信息,包括:

对于检测到的每个所述切面指令信息,获取所述切面指令信息中的切点指令,所述切点指令包括指令标识和切点标记,所述切点标记用于指示所述切面指令信息与所述指令标识对应的目标指令信息关联;

检测所述指令标识对应的、且包括所述第一标记的指令信息,将检测到的指令信息确定为所述目标指令信息。

可选地,所述切点标记包括类标记和方法标记,所述指令标识包括类标识和方法标识,所述切点指令包括添加有所述类标记的所述类标识和添加有所述方法标记的所述方法标识,所述检测所述指令标识对应的、且包括所述第一标记的指令信息,将检测到的指令信息确定为所述目标指令信息,包括:

在所述指令集合中检测所述类标识指示的目标类;

在所述目标类中检测所述方法标识指示的、且包括所述第一标记的指令信息,将检测到的指令信息确定为所述目标指令信息。

可选地,所述响应于所述指令集合中的每个所述目标指令信息均存在关联的所述切面指令信息,且每个所述切面指令信息均存在关联的所述目标指令信息,输出第一检测结果之后,所述埋点检测方法还包括:

对所述指令集合进行编译,得到多个类文件;

从任一类文件中获取包括所述第二标记的所述切面指令信息,所述切面指令信息中包括数据采集指令和切点指令,所述切点指令包括指令标识和切点标记,所述切点标记用于指示所述切面指令信息与所述指令标识对应的目标指令信息关联;

在所述多个类文件中确定包括所述指令标识对应的目标指令信息的目标类文件;

将所述数据采集指令添加至所述目标类文件中的所述目标指令信息中。

可选地,所述将所述数据采集指令添加至所述目标类文件中的所述目标指令信息中,包括:

在所述目标类文件中确定所述目标指令信息所在的目标类;

基于所述目标类和所述数据采集指令生成代理类,所述代理类中包括所述目标类中的指令以及所述数据采集指令;

将所述目标类文件中的所述目标类替换为所述代理类。

可选地,所述获取待检测的指令集合之前,所述埋点检测方法还包括:

为待埋点的指令信息添加所述第一标记,得到所述目标指令信息;

为用于埋点的指令信息添加所述第二标记,得到所述切面指令信息;

基于所述目标指令信息和所述切面指令信息,确定所述指令集合。

可选地,所述埋点检测方法还包括:

响应于所述指令集合中的至少一个所述目标指令信息不存在关联的所述切面指令信息,或者至少一个所述切面指令信息不存在关联的所述目标指令信息,输出第二检测结果,所述第二检测结果用于表示所述指令集合中的埋点无效。

根据本公开实施例的第二方面,提供一种埋点检测装置,包括:

检测单元,被配置为执行在指令集合中,检测与每个目标指令信息关联的切面指令信息,以及检测与每个所述切面指令信息关联的目标指令信息,其中所述目标指令信息为待埋点的指令信息,所述切面指令信息为用于埋点的指令信息,所述目标指令信息与所述切面指令信息关联是指所述切面指令信息用于采集所述目标指令信息在运行时产生的数据;

第一检测结果输出单元,被配置为执行响应于所述指令集合中的每个所述目标指令信息均存在关联的所述切面指令信息,且每个所述切面指令信息均存在关联的所述目标指令信息,输出第一检测结果,所述第一检测结果用于表示所述指令集合的埋点有效。

可选地,所述检测单元,包括:

第一检测子单元,被配置为执行检测包括第一标记的每个指令信息,将检测到的指令信息确定为所述目标指令信息,所述第一标记用于识别所述第一标记所在的指令信息为所述目标指令信息;

第二检测子单元,被配置为执行检测与每个所述目标指令信息关联的,且包括第二标记的指令信息,将检测到的指令信息确定为所述切面指令信息,所述第二标记用于识别所述第二标记所在的指令信息为所述切面指令信息。

可选地,所述第二检测子单元,被配置为执行:

对于检测到的每个所述目标指令信息,获取所述目标指令信息对应的指令标识,所述指令标识为所述目标指令信息的唯一标识;

检测包括所述第二标记和切点指令的指令信息,将检测到的指令信息确定为所述切面指令信息,其中所述切点指令包括所述指令标识和切点标记,所述切点标记用于指示所述切面指令信息与所述指令标识对应的所述目标指令信息关联。

可选地,所述第二检测子单元,被配置为执行:

在所述指令集合中检测包括所述第二标记、所述切点指令和数据采集指令的指令信息,将检测到的指令信息确定为所述切面指令信息,所述切点标记还用于指示将所述数据采集指令添加至所述指令标识对应的所述目标指令信息中,以采集所述目标指令信息运行时产生的数据。

可选地,所述指令标识包括所述目标指令信息所在的目标类对应的类标识和所述目标指令信息所属的方法对应的方法标识,所述切点标记包括类标记和方法标记,所述切点指令包括添加有所述类标记的所述类标识以及添加有所述方法标记的所述方法标识。

可选地,所述检测单元,包括:

第三检测子单元,被配置为执行检测包括所述第二标记的每个指令信息,将检测到的指令信息确定为所述切面指令信息;

第四检测子单元,被配置为执行检测与每个所述切面指令信息关联的,且包括所述第一标记的指令信息,将检测到的指令信息确定为所述目标指令信息。

可选地,所述第四检测子单元,被配置为执行:

对于检测到的每个所述切面指令信息,获取所述切面指令信息中的切点指令,所述切点指令包括指令标识和切点标记,所述切点标记用于指示所述切面指令信息与所述指令标识对应的目标指令信息关联;

检测所述指令标识对应的、且包括所述第一标记的指令信息,将检测到的指令信息确定为所述目标指令信息。

可选地,所述切点标记包括类标记和方法标记,所述指令标识包括类标识和方法标识,所述切点指令包括添加有所述类标记的所述类标识和添加有所述方法标记的所述方法标识,所述第四检测子单元,被配置为执行:

在所述指令集合中检测所述类标识指示的目标类;

在所述目标类中检测所述方法标识指示的、且包括所述第一标记的指令信息,将检测到的指令信息确定为所述目标指令信息。

可选地,所述埋点检测装置还包括:

编译单元,被配置为执行对所述指令集合进行编译,得到多个类文件;

指令信息获取单元,被配置为执行从任一类文件中获取包括所述第二标记的所述切面指令信息,所述切面指令信息中包括数据采集指令和切点指令,所述切点指令包括指令标识和切点标记,所述切点标记用于指示所述切面指令信息与所述指令标识对应的目标指令信息关联;

类文件获取单元,被配置为执行在所述多个类文件中确定包括所述指令标识对应的目标指令信息的目标类文件;

指令添加单元,被配置为执行将所述数据采集指令添加至所述目标类文件中的所述目标指令信息中。

可选地,所述指令添加单元,包括:

目标类确定子单元,被配置为执行在所述目标类文件中确定所述目标指令信息所在的目标类;

代理类生成子单元,被配置为执行基于所述目标类和所述数据采集指令生成代理类,所述代理类中包括所述目标类中的指令以及所述数据采集指令;

替换子单元,被配置为执行将所述目标类文件中的目标类替换为所述代理类。

可选地,所述埋点检测装置还包括:

第一标记添加单元,被配置为执行为待埋点的指令信息添加所述第一标记,得到所述目标指令信息;

第二标记添加单元,被配置为执行为用于埋点的指令信息添加所述第二标记,得到所述切面指令信息;

集合确定单元,被配置为执行基于所述目标指令信息和所述切面指令信息,确定所述指令集合。

可选地,所述埋点检测装置还包括:

第二检测结果输出单元,被配置为执行响应于所述指令集合中的至少一个所述目标指令信息不存在关联的所述切面指令信息,或者至少一个所述切面指令信息不存在关联的所述目标指令信息,输出第二检测结果,所述第二检测结果用于表示所述指令集合中的埋点无效。

根据本公开实施例的第三方面,提供了一种电子设备,所述电子设备包括:

处理器;

用于存储所述处理器可执行指令的存储器;

其中,所述处理器被配置为执行所述指令,以实现如上述第一方面所述的埋点检测方法。

根据本公开实施例的第四方面,提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行上述第一方面所述的埋点检测方法。

根据本公开实施例的第五方面,提供一种计算机程序产品,当所述计算机程序产品中的指令由电子设备的处理器执行时,使得电子设备能够执行上述第一方面所述的埋点检测方法。

本公开实施例提供的埋点检测方法、装置、电子设备及存储介质中,目标指令信息为待埋点的指令信息,切面指令信息为用于埋点的指令信息,其中目标指令信息与切面指令信息关联是指切面指令信息用于采集该目标指令信息在运行时产生的数据,则通过在指令集合中检测每个目标指令信息关联的切面指令信息,以及每个切面指令信息关联的目标指令信息,来确定每个目标指令信息均存在关联的切面指令信息,以及每个切面指令信息均存在关联的目标指令信息,从而确定能够实现对每个目标指令信息进行埋点,也能够发挥每个切面指令信息的埋点功能,也即是指令集合中的埋点均有效。本公开实施例实现了自动检测埋点的有效性,能够节约人力和时间,提高了埋点检测的效率。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。

图1是根据一示例性实施例示出的一种埋点检测方法的流程图。

图2是根据一示例性实施例示出的另一种埋点检测方法的流程图。

图3是根据一示例性实施例示出的另一种埋点检测方法的流程图。

图4是根据一示例性实施例示出的一种埋点检测装置的框图。

图5是根据一示例性实施例示出的另一种埋点检测装置的框图。

图6是根据一示例性实施例示出的一种电子设备的框图。

具体实施方式

为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。

需要说明的是,本公开的说明书和权利要求书及上述附图说明中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。

需要说明的是,本公开所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据,均为经用户授权或者经过各方充分授权的信息和数据。

在对本公开实施例进行详细说明之前,先对涉及到的概念进行如下解释说明:

(1)Java(一种计算机编程语言)注解:Java注解可以理解为是代码中的特殊标记,这些标记可以在编译、类加载以及运行时被读取,并执行相应的处理。通过添加Java注解,开发人员能够在不改变原有代码的逻辑的情况下,在原有代码中嵌入补充信息。其中,本公开实施例中记载的第一标记、第二标记以及切点标记等都是自定义的Java注解类型。

(2)class(类)文件:class文件的全称为Java class文件,class文件能够在平台无关性和网络移动性等方面使Java更适合网络。class文件在平台无关性方面的任务是:为Java程序提供独立于底层主机平台的二进制形式的服务。

(3)APT(Annotation Processing Tool,注解处理器):APT是JAX-WS(Java APIfor XML Web Services,XML Web服务的Java接口)重要的组成部分,由于JAX-WS2.0规范涉及到很多元数据,因此需要APT来处理Java注解。

(4)切面(Aspect):由切点和增强组成,既包含了横切逻辑的定义,也包含了连接点的定义。增强是指织入到目标类连接点上的一段代码。增强又称为通知(Advice),通知是切面的详细实现。以目标方法为参照点,根据通知放置的位置,可以划分为前置通知(Before)、后置返回通知(After Returning)、后置异常通知(After Throwing)、后置终于通知(After)以及围绕通知(Around)。在实际应用,通知是切面类中的一个方法。

连接点(Join point)是指指令运行过程中某个特定的位置。例如类初始化或者类初始化后。再例如方法调用前或者方法调用后等。切入点(Pointcut)用于定义通知应该切入到哪些连接点上。不同的通知通常会切入到不同的切入点上,通知和切入点之间的匹配是由切入点的正则表达式来定义的。

目标对象(Target)是指需要织入增强的目标类。代理对象(Proxy)是指将增强织入到目标对象之后被创建的对象,代理对象的功能等于目标对象的功能加上增强的功能,代理对象也即是具有与目标类相同的功能或者对目标类的功能进行增强的代理类。代理对象是指令执行过程中的产物。其中,织入(Weaving)是指将增强应用到目标对象上从而创建一个新的代理对象的过程。该过程能够发生在编译期、类装载期及执行期,不同的发生点有不同的条件。例如发生在编译期,则需要有支持AOP(Aspect Oriented Programming,面向切面编程)实现的编译器;发生在类装载期,则需要有支持AOP实现的类装载器;发生在执行期,则可直接通过Java语言的反射机制与动态代理机制来动态实现。

(5)埋点有效性:本公开实施例中,埋点有效性是指目标类中的方法,存在关联的切面类会在该方法中插入埋点代码,并且,切面类也存在关联的目标类中的方法,从而将切面类中的埋点代码插入目标类的方法中。该埋点代码是指用于进行数据采集的代码。

(6)Gradle是一种基于Apache Ant(一种将软件编译、测试、部署等步骤联系在一起并加以自动化的工具)和Apache Maven(一种Java项目构建工具)概念的项目自动化构建开源工具。Android Gradle Plugin是一种用来构建Android(一种移动操作系统)工程的插件。Transform插件是Android Gradle Plugin提供的一种接口,用以获取参与Android项目的class文件。

本公开实施例提供的埋点检测方法,能够应用于任一需要进行埋点检测的场景下。

例如,在开发Android项目的场景中,采用面向切面编程的技术,确定指令集合,该指令集合中包括目标指令信息和切面指令信息,该目标指令信息包括第一标记,是目标类中的方法,该切面指令信息包括第二标记,是包括数据采集指令以及切点指令的切面类,该切点指令用于指示切面类和目标类之间关联。其中,数据采集指令也即是上述增强或者通知,切点指令也即是上述切点。后续在编译过程中即可根据切面类中的切点指令,将该切面类中的数据采集指令添加至目标指令信息对应的位置,从而采集该目标指令信息在运行时产生的数据,实现对目标指令信息进行埋点。

随着指令集合对应的Android项目进行升级或者更新,该指令集合也会不断更新,在更新过程中一些指令可能会被误删,导致埋点失效。因此,采用本公开实施例提供的方法,在当前的指令集合中检测每个目标指令信息是否存在关联的切面指令信息,并检测每个切面指令信息是否存在关联的目标指令信息。如果某个目标指令信息不存在关联的切面指令信息,则无法实现对该目标指令信息进行数据采集,如果某个切面指令信息不存在关联的目标指令信息,则该切面指令信息无法发挥数据采集的作用。

因此,在检测到每个目标指令信息均存在关联的切面指令信息,且每个切面指令信息均存在关联的目标指令信息时,说明该指令集合中的埋点有效。在检测到至少一个目标指令信息不存在关联的切面指令信息,或者至少一个切面指令信息不存在关联的目标指令信息时,说明该指令集合中的埋点无效。

图1是根据一示例性实施例示出的一种埋点检测方法的流程图,参见图1,该方法包括以下步骤:

101、在指令集合中,检测与每个目标指令信息关联的切面指令信息,以及检测与每个切面指令信息关联的目标指令信息。

电子设备获取待检测的指令集合,待检测的指令集合是指待检测埋点是否有效的指令集合。目标指令信息为待埋点的指令信息,切面指令信息为用于埋点的指令信息,目标指令信息与切面指令信息关联是指切面指令信息用于采集目标指令信息在运行时产生的数据。其中,一个目标指令信息可以与至少一个切面指令信息关联,一个切面指令信息也可以与至少一个目标指令信息关联。该指令集合中包括多个指令信息,多个指令信息中可能包括目标指令信息或者切面指令信息,例如每个指令信息为一段代码,则指令集合中包括多段代码。

电子设备在该指令集合中确定至少一个目标指令信息,并检测与每个目标指令信息关联的切面指令信息。电子设备在该指令集合中确定至少一个切面指令信息,并检测与每个切面指令信息关联的目标指令信息。

102、响应于指令集合中的每个目标指令信息均存在关联的切面指令信息,且每个切面指令信息均存在关联的目标指令信息,输出第一检测结果。

如果检测到每个目标指令信息均存在关联的切面指令信息,则说明能够实现对每个目标指令信息进行数据采集,也即是能够实现对每个目标指令信息进行埋点。如果检测到每个切面指令信息均存在关联的目标指令信息,则说明每个切面指令信息均能够发挥埋点的功能。

因此,在指令集合中的每个目标指令信息均存在关联的切面指令信息,且每个切面指令信息均存在关联的目标指令信息时,说明该指令集合中的埋点均有效。则电子设备响应于指令集合中的每个目标指令信息均存在关联的切面指令信息,且每个切面指令信息均存在关联的目标指令信息,输出第一检测结果,该第一检测结果用于表示指令集合的埋点有效,从而实现对指令集合自动进行埋点检测。

需要说明的是,本公开实施例以执行主体为电子设备为例进行说明,例如该电子设备为便携式、袖珍式、手持式等多种类型的电子设备,如手机、计算机、平板电脑等。在另一实施例中,埋点检测方法的执行主体还可以为其他设备。

本公开实施例提供的方法中,目标指令信息为待埋点的指令信息,切面指令信息为用于埋点的指令信息,其中目标指令信息与切面指令信息关联是指切面指令信息用于采集该目标指令信息在运行时产生的数据,则通过在指令集合中检测每个目标指令信息关联的切面指令信息,以及每个切面指令信息关联的目标指令信息,来确定每个目标指令信息均存在关联的切面指令信息,以及每个切面指令信息均存在关联的目标指令信息,从而确定能够实现对每个目标指令信息进行埋点,也能够发挥每个切面指令信息的埋点功能,也即是指令集合中的埋点均有效。本公开实施例的方法实现了自动检测埋点的有效性,能够节约人力和时间,提高了埋点检测的效率。

图2是根据一示例性实施例示出的另一种埋点检测方法的流程图,参见图2,该方法包括以下步骤:

201、为待埋点的指令信息添加第一标记,得到目标指令信息。

需要说明的是,本公开实施例以执行主体为电子设备为例进行说明,例如该电子设备为便携式、袖珍式、手持式等多种类型的电子设备,如手机、计算机、平板电脑等。在另一实施例中,埋点检测方法的执行主体还可以为其他设备。

电子设备获取待埋点的指令信息,该待埋点的指令信息是指需要进行数据采集的指令信息,例如该指令信息为用于实现登录、注册或者数据推荐等功能的指令信息。可选地,该待埋点的指令信息为一个类中的方法。电子设备为该待埋点的指令信息添加第一标记,得到目标指令信息,其中第一标记用于识别该第一标记所在的指令信息为目标指令信息,目标指令信息即为待埋点的指令信息。

202、为用于埋点的指令信息添加第二标记,得到切面指令信息。

电子设备获取用于埋点的指令信息,该用于埋点的指令信息是指能够进行数据采集的指令信息,例如该指令信息为用于采集访问次数、访客个数、停留时长或者页面浏览数等数据的指令信息。可选地,该用于埋点的指令信息为一个类。电子设备为该用于埋点的指令信息添加第二标记,得到切面指令信息,其中第二标记用于识别该第二标记所在的指令信息为切面指令信息,切面指令信息即为用于埋点的指令信息。其中,第一标记和第二标记不同,指令信息添加上第一标记后称为目标指令信息,指令信息添加上第二标记后称为切面指令信息。其中,电子设备能够将目标指令信息与切面指令信息进行关联,目标指令信息与切面指令信息关联是指该切面指令信息用于采集该目标指令信息在运行时产生的数据。

在一些实施例中,电子设备为目标指令信息对应的指令标识添加切点标记,得到切点指令,将数据采集指令和切点指令,构成用于埋点的指令信息。

其中,电子设备获取目标指令信息对应的指令标识,并为该指令标识添加切点标记,得到切点指令,电子设备获取数据采集指令,将该数据采集指令和切点指令,构成用于埋点的指令信息。则电子设备将该用于埋点的指令信息添加第一标记后,该目标指令信息与该切面指令信息关联,该切点指令用于指示该切点指令所在的切面指令信息与该切点指令中的指令标识对应的目标指令信息关联。本公开实施例中,切面指令信息中包括用于指示关联关系的切点指令,因此通过该切点指令,能够将目标指令信息和切面指令信息关联起来,提供了一种将目标指令信息和切面指令信息进行关联的方法。并且通过为指令标识添加切点标记,来将切点指令中的指令标识与指令集合中的其他指令标识加以区分,便于根据切点标记在指令集合中查询切点指令中的指令标识。

在一些实施例中,切点标记包括类标记和方法标记,指令标识包括目标指令信息所在的目标类对应的类标识和目标指令信息所属的方法对应的方法标识,电子设备为目标指令信息对应的指令标识添加切点标记,得到切点指令,包括:为类标识添加类标记,为方法标识添加方法标记,将添加有类标记的类标识和添加有方法标记的方法标识,构成切点指令。

其中,电子设备获取目标指令信息所在的目标类对应的类标识,以及目标指令信息所属的方法对应的方法标识,并为该类标识添加类标记,为该方法标识添加方法标记,得到切点指令,该切点指令中包括添加有类标记的类标识和添加有方法标记的方法标识。本公开实施例中,通过添加方法标记和类标记,将切点指令中的方法标识和类标识与指令集合中其他的方法标识和类标识加以区分,便于后续根据类标记和方法标记查询切点指令中的方法标识和类标识,并根据切点指令中的类标识查询目标类,从而在目标类中查询方法标识指示的目标指令信息。

在一些实施例中,电子设备采用面向切面编程的技术,在指令信息中进行埋点。第一标记为自定义的Java注解,例如将该第一标记定义为“@Report”注解,电子设备在待埋点的指令信息上添加“@Report”注解,得到目标指令信息,该目标指令信息所在的类可以称为目标类,该目标指令信息为目标类中的目标方法。第二标记为自定义的Java注解,例如将该第二标记定义为“@Aspect”注解,则电子设备在用于埋点的指令信息上添加“@Report”注解,得到切面指令信息,该切面指令信息为切面类。

类标记和方法标记为自定义的Java注解,例如将该类标记定义为“@TargetClass”注解,将该方法标记定义为“@Insert”注解。电子设备为类标识添加“@TargetClass”注解,为方法标识添加“@Insert”注解,得到切点指令,该切点指令也即是切面类中的切点。

其中,切面指令信息中的数据采集指令为该切面类中的一个方法,可以称为该切面类中的增强或者通知。按照切面类中的切点指令,将切面通知添加至目标类的目标方法中,实现对目标方法的埋点。在一些实施例中,该切面类中还定义有该通知的类型,通知的类型可以由该通知添加至目标方法中的位置来划分,例如通知包括前置通知、后置返回通知、后置异常通知、后置终于通知以及围绕通知。前置通知是指添加至目标方法的前面的通知,后置返回通知是指添加至目标方法的后面。

需要说明的是,本公开实施例仅以先执行上述步骤201,再执行上述步骤202为例进行说明。在另一实施例中,电子设备还可以先执行上述步骤202,再执行上述步骤201。

需要说明的是,上述步骤201-202仅以确定一个目标指令信息以及该目标指令信息关联的切面指令信息为例来说明,在另一实施例中,电子设备可以按照上述步骤201-202的方法,确定多个目标指令信息以及每个目标指令信息关联的切面指令信息。其中,一个目标指令信息可以与至少一个切面指令信息关联,一个切面指令信息可以与至少一个目标指令信息关联。

203、基于目标指令信息和切面指令信息,确定指令集合。

电子设备基于获取的至少一个目标指令信息和至少一个切面指令信息,确定指令集合,该指令集合中包括该至少一个目标指令信息和至少一个切面指令信息。

在一些实施例中,电子设备将目标指令信息和切面指令信息,构成指令集合。也即是指令集合中仅包括目标指令信息和切面指令信息。在一些实施例中,电子设备获取无需埋点的指令信息,将该无需埋点的指令信息、目标指令信息和切面指令信息,构成指令集合,也即是指令集合中包括目标指令信息、切面指令信息以及无需埋点的指令信息。

上述步骤201-203中说明了构建指令集合的过程,该指令集合中包括目标指令信息和切面指令信息,切面指令信息能够采集该切面指令信息关联的目标指令信息在运行时产生的数据。后续在编译过程中,即可将切面指令信息添加在该切面指令信息关联的目标指令信息中,从而在目标指令信息运行时进行数据采集,实现对目标指令信息进行埋点。本公开实施例中,采用面向切面编程的技术,实现对目标指令信息进行埋点,由于一个切面指令信息能够关联多个目标指令信息,因此仅需一个切面指令信息即可实现对多个目标指令信息进行埋点,能够提高埋点的效率。并且,采用添加第一标记和第二标记的方式,便于后续在进行埋点检测时,根据第一标记来检测目标指令信息,根据第二标记来检测切面指令信息。

204、获取待检测的指令集合。

电子设备创建指令集合后,可以通过运行指令集合实现对应的功能。在指令集合的使用过程中,为了对功能进行升级或者更新,该指令集合也会不断进行更新。而在更新指令集合的过程中,该指令集合中的一些指令可能会被误删,例如目标指令信息被误删或者切面指令信息被误删,导致指令集合中的埋点失效。因此电子设备可以先获取待检测的指令集合,来检测该指令集合中的埋点是否有效。

205、在指令集合中检测与每个目标指令信息关联的切面指令信息。

电子设备在指令集合中确定至少一个目标指令信息,并检测与每个目标指令信息关联的切面指令信息。

在一些实施例中,电子设备在指令集合中检测与每个目标指令信息关联的切面指令信息,包括:检测包括第一标记的每个指令信息,将检测到的指令信息确定为目标指令信息,检测与每个目标指令信息关联的,且包括第二标记的指令信息,将检测到的指令信息确定为切面指令信息。其中,第一标记用于识别该第一标记所在的指令信息为目标指令信息,第二标记用于识别该第二标记所在的指令信息为切面指令信息,该第一标记与第二标记不同。

其中,电子设备在指令集合中按照顺序进行检测,从而检测出包括第一标记的每个目标指令信息,例如,电子设备在指令集合中检测第一标记,对于检测到的每个第一标记,电子设备确定该第一标记所在的指令信息,该第一标记所在的指令信息即为目标指令信息。对于检测到的每个目标指令信息,电子设备在指令集合中检测该目标指令信息关联的指令信息,并检测该指令信息中是否添加第二标记,如果该指令信息包括第二标记,则说明该指令信息是目标指令信息关联的切面指令信息,如果该指令信息没有添加第二标记,则说明该指令信息不是目标指令信息关联的切面指令信息。本公开实施例中,由于目标指令信息为包括第一标记的指令信息,切面指令信息为包括第二标记的指令信息,因此电子设备能够通过检测第一标记和第二标记,来检测目标指令信息和切面指令信息,实现了根据第一标记和第二标记,对目标指令信息、切面指令信息以及其他指令信息加以区分,便于对指令集合进行埋点检测。

在一些实施例中,电子设备检测与每个目标指令信息关联的,且包括第二标记的指令信息,将检测到的指令信息确定为切面指令信息,包括:对于检测到的每个目标指令信息,获取目标指令信息对应的指令标识,在指令集合中,检测包括第二标记和切点指令的指令信息,将检测到的指令信息确定为切面指令信息。其中,指令标识为目标指令信息的唯一标识,切点指令包括指令标识和切点标记,切点标记用于指示切面指令信息与指令标识对应的目标指令信息关联。

对于检测到的每个目标指令信息,电子设备获取该目标指令信息对应的指令标识,在指令集合中,检测包括切点标记的该指令标识,该包括切点标记的指令标识即为切点指令,电子设备确定该切点指令所在的指令信息,并判断该指令信息是否包括第二标记,如果该指令信息包括第二标记,则说明该指令信息是目标指令信息关联的切面指令信息,如果该指令信息不包括第二标记,则说明该指令信息不是目标指令信息关联的切面指令信息。本公开实施例中,通过切点指令来指示目标指令信息与切面指令信息之间的关联关系,因此电子设备能够基于切点指令来检测目标指令信息关联的切面指令信息,提供了一种检测关联的切面指令信息的方式。

在一些实施例中,电子设备检测包括第二标记和切点指令的指令信息,将检测到的指令信息确定为切面指令信息,包括:在指令集合中检测包括第二标记、切点指令和数据采集指令的指令信息,将检测到的指令信息确定为切面指令信息。其中,切点标记还用于指示将数据采集指令添加至指令标识对应的目标指令信息中,以采集目标指令信息运行时产生的数据。

电子设备获取该目标指令信息对应的指令标识,在指令集合中,检测包括切点标记的该指令标识,该包括切点标记的指令标识即为切点指令,电子设备确定该切点指令所在的指令信息,并判断该指令信息是否包括第二标记,如果该指令信息不包括第二标记,则说明该指令信息不是目标指令信息关联的切面指令信息。如果该指令信息包括第二标记,则电子设备检测该指令信息中是否包括数据采集指令,该数据采集指令是指用于进行数据采集的指令。如果该指令信息中包括数据采集指令,则电子设备确定检测到包括第二标记、切点指令和数据采集指令的切面指令信息。本公开实施例中,在检测到包括第二标记和切点指令的指令信息后,还需判断该指令信息中是否存在数据采集指令,避免检测到的包括第二标记和切点指令的指令信息中没有数据采集指令,无法实现对目标指令信息进行数据采集的情况,使得埋点检测的检测维度更加全面,从而提高埋点检测的准确性。

在一些实施例中,指令标识包括目标指令信息所在的目标类对应的类标识和目标指令信息所属的方法对应的方法标识,切点标记包括类标记和方法标记,切点指令包括添加有类标记的类标识以及添加有方法标记的方法标识。其中,电子设备获取该目标指令信息所在的目标类对应的类标识,以及目标指令信息所属的方法对应的方法标识,检测添加有类标记的该类标识,以及添加有方法标记的该方法标识,该添加有类标记的类标识和添加有方法标记的方法标识所在的指令即为切点指令。本公开实施例中,通过方法标记和类标记,将切点指令中的方法标识和类标识与指令集合中其他的方法标识和类标识加以区分,便于后续根据类标记和方法标记检测切点指令,提供了一种检测切点指令的方法。

206、在指令集合中检测与每个切面指令信息关联的目标指令信息。

电子设备在指令集合中确定至少一个切面指令信息,并检测与每个切面指令信息关联的目标指令信息。

在一些实施例中,电子设备在指令集合中检测与每个切面指令信息关联的目标指令信息,包括:检测包括第二标记的每个指令信息,将检测到的指令信息确定为切面指令信息,检测与每个切面指令信息关联的,且包括第一标记的指令信息,将检测到的指令信息确定为目标指令信息。其中,第一标记用于识别该第一标记所在的指令信息为目标指令信息,第二标记用于识别该第二标记所在的指令信息为切面指令信息,该第一标记与第二标记不同。

其中,电子设备在指令集合中按照顺序进行检测,从而检测出包括第二标记的每个切面指令信息,例如,电子设备在指令集合中检测第二标记,对于检测到的每个第二标记,电子设备确定该第二标记所在的指令信息,该第二标记所在的指令信息即为切面指令信息。对于检测到的每个切面指令信息,电子设备在指令集合中检测该切面指令信息关联的指令信息,并检测该指令信息中是否包括第一标记,如果该指令信息包括第一标记,则说明该指令信息是切面指令信息关联的目标指令信息,如果该指令信息不包括第一标记,则说明该指令信息不是切面指令信息关联的目标指令信息。本公开实施例中,由于目标指令信息为包括第一标记的指令信息,切面指令信息为包括第二标记的指令信息,因此电子设备能够通过检测第一标记和第二标记,来检测目标指令信息和切面指令信息,实现了根据第一标记和第二标记,对目标指令信息、切面指令信息和其他指令信息加以区分,便于对指令集合进行埋点检测。

在一些实施例中,电子设备检测与每个切面指令信息关联的,且包括第一标记的指令信息,将检测到的指令信息确定为目标指令信息,包括:对于检测到的每个切面指令信息,获取切面指令信息中的切点指令,切点指令包括指令标识和切点标记,切点标记用于指示切面指令信息与指令标识对应的目标指令信息关联。电子设备在指令集合中,检测指令标识对应的、且包括第一标记的指令信息,将检测到的指令信息确定为目标指令信息。

对于检测到的每个切面指令信息,电子设备获取该切面指令信息中的切点指令,并获取切点指令中的指令标识,在指令集合中检测该指令标识对应的指令信息,并判断该指令信息是否包括第一标记,如果该指令信息包括第一标记,则说明该指令信息是切面指令信息关联的目标指令信息,如果该指令信息不包括第一标记,则说明该指令信息不是切面指令信息关联的目标指令信息。本公开实施例中,通过切点指令来指示目标指令信息与切面指令信息之间的关联关系,因此电子设备能够基于切点指令中的指令标识来检测切面指令信息关联的目标指令信息,提供了一种检测关联的目标指令信息的方式。

在一些实施例中,切点标记包括类标记和方法标记,指令标识包括类标识和方法标识,切点指令包括添加有类标记的类标识和添加有方法标记的方法标识,电子设备检测指令标识对应的、且包括第一标记的指令信息,将检测到的指令信息确定为目标指令信息,包括:在指令集合中检测类标识指示的目标类,在目标类中检测方法标识指示的、且包括第一标记的指令信息,将检测到的指令信息确定为目标指令信息。

其中,电子设备获取切点指令中的类标识和方法标识,在指令集合中检测类标识指示的目标类,该目标类中包括至少一个方法,电子设备在该目标类中检测该方法标识指示的指令信息,该指令信息属于目标类中的一个方法。如果该指令信息包括第一标记,则说明该指令信息是切面指令信息关联的目标指令信息,如果该指令信息不包括第一标记,则说明该指令信息不是切面指令信息关联的目标指令信息。本公开实施例中,根据切点指令中的类标识检测目标类,从而在目标类中检测方法标识指示的目标指令信息,通过划分方法标识和类标识,先根据方法标识锁定目标类,从而缩小检测范围,实现在指令集合中逐级查询目标指令信息,有利于提高检测效率。

在一些实施例中,电子设备中包括APT(Annotation Processing Tool,注解处理器),电子设备采用APT进行双向检测,也即是检测每个目标指令信息关联的切面指令信息,以及每个切面指令信息关联的目标指令信息。

需要说明的是,本公开实施例仅以先执行上述步骤205,再执行上述步骤206为例进行说明。在另一实施例中,电子设备还可以先执行上述步骤206,再执行上述步骤205,或者同时执行上述步骤205和206。

207、响应于指令集合中的每个目标指令信息均存在关联的切面指令信息,且每个切面指令信息均存在关联的目标指令信息,输出第一检测结果。

如果检测到每个目标指令信息均存在关联的切面指令信息,则说明能够实现对每个目标指令信息进行埋点。如果检测到每个切面指令信息均存在关联的目标指令信息,则说明每个切面指令信息均能够发挥埋点的作用。因此,在指令集合中的每个目标指令信息均存在关联的切面指令信息,且每个切面指令信息均存在关联的目标指令信息时,说明该指令集合中的埋点均有效。则电子设备响应于指令集合中的每个目标指令信息均存在关联的切面指令信息,且每个切面指令信息均存在关联的目标指令信息,输出第一检测结果,该第一检测结果用于表示指令集合的埋点有效,从而实现对指令集合自动进行埋点检测。

需要说明的是,本公开实施例仅以响应于指令集合中的每个目标指令信息均存在关联的切面指令信息,且每个切面指令信息均存在关联的目标指令信息,输出第一检测结果为例进行说明。在另一实施例中,如果某个目标指令信息不存在关联的切面指令信息,则无法实现对该目标指令信息进行埋点。如果某个切面指令信息不存在关联的目标指令信息,则该切面指令信息无法发挥埋点的作用。

因此,电子设备响应于指令集合中的至少一个目标指令信息不存在关联的切面指令信息,或者至少一个切面指令信息不存在关联的目标指令信息,输出第二检测结果,第二检测结果用于表示指令集合中的埋点无效。本公开实施例中,在检测到埋点无效的情况下,输出第二检测结果,便于开发人员根据第二检测结果得知指令集合中的埋点无效。

在一些实施例中,电子设备响应于指令集合中的至少一个目标指令信息不存在关联的切面指令信息,或者至少一个切面指令信息不存在关联的目标指令信息,输出第二检测结果,包括以下至少一项:

第一,电子设备响应于指令集合中的至少一个目标指令信息不存在关联的切面指令信息,输出包括该至少一个目标指令信息的第二检测结果,从而提示开发人员无法实现对该至少一个目标指令信息进行埋点。则开发人员查看到该第二检测结果后,即可在指令集合中重新编写与该至少一个目标指令信息关联的切面指令信息,或者将该至少一个目标指令信息中的第一标记删除,来解决指令集合中的埋点失效的问题。

第二,电子设备响应于指令集合中的至少一个切面指令信息不存在关联的目标指令信息,输出包括该至少一个切面指令信息的第二检测结果,从而提示开发人员该至少一个切面指令信息无法发挥埋点的作用。则开发人员查看到该第二检测结果后,即可在指令集合中重新编写与该至少一个切面指令信息关联的目标指令信息,或者将该至少一个切面指令信息中的与该目标指令信息对应的切点指令删除,来解决指令集合中的埋点失效的问题。

本公开实施例中,通过在第二检测结果中添加导致埋点失效的目标指令信息或者切面指令信息,来提示开发人员指令集合中的哪些指令信息出现问题,提高了第二检测结果的信息量,便于开发人员根据第二检测结果对指令集合进行修改,来解决指令集合中的埋点无效的问题。

需要说明的是,本公开实施例仅以目标指令信息为添加有第一标记的指令信息,切面指令信息为添加有第二标记的指令信息为例进行说明,通过第一标记和第二标记来区分和检测目标指令信息和切面指令信息,在另一实施例中,电子设备还可以采用其他方式来区分和检测目标指令信息和切面指令信息。

208、对指令集合进行编译,得到多个类文件。

指令集合中包括多个类,电子设备在确定指令集合中的埋点有效之后,则对该指令集合进行编译,得到多个类文件。

209、从任一类文件中获取包括第二标记的切面指令信息,在多个类文件中确定包括指令标识对应的目标指令信息的目标类文件,将数据采集指令添加至目标类文件中的目标指令信息中。

电子设备对多个类文件进行检测,确定包括第二标记的至少一个类文件,对于每个包括第二标记的类文件,电子设备在该类文件中获取包括该第二标记的切面指令信息,该切面指令信息中包括数据采集指令和切点指令,切点指令包括指令标识和切点标记,切点标记用于指示切面指令信息与指令标识对应的目标指令信息关联。则电子设备在多个类文件中确定包括该指令标识对应的目标指令信息的目标类文件,然后将切面指令信息中的数据采集指令添加在目标类文件中的目标指令信息中。本实施例中,根据第二标记识别切面指令信息,根据切面指令信息中的切点指令,将切面指令信息中的数据采集指令添加至对应的目标指令信息中,从而通过数据采集指令来采集目标指令信息在运行时产生的数据,实现了对目标指令信息进行埋点。

在一些实施例中,电子设备对多个类文件进行遍历,对于当前遍历的类文件,电子设备检测该类文件中是否包括第二标记,如果该类文件中不包括第二标记,则电子设备继续遍历下一个类文件。如果该类文件中包括第二标记,则电子设备获取该类文件中包括该第二标记的切面指令信息,并在多个类文件中确定包括该切面指令信息中的指令标识对应的目标指令信息的目标类文件,将切面指令信息中的数据采集指令添加至该目标类文件中的目标指令信息中,然后继续遍历下一个类文件,直至电子设备遍历完多个类文件中的最后一个类文件。

在一些实施例中,电子设备将数据采集指令添加至目标类文件中的目标指令信息中,包括:在目标类文件中确定目标指令信息所在的目标类,基于目标类和数据采集指令生成代理类,代理类中包括目标类中的指令以及数据采集指令,将目标类文件中的目标类替换为代理类。其中,目标类文件中包括至少一个类,电子设备在该目标类文件中确定该第一标记所在的目标类,然后基于该目标类和切面指令信息中的数据采集指令生成代理类,并将该目标类文件中的目标类替换为代理类,其中该代理类中的数据采集指令位于代理类中的目标指令信息所在的位置,也即是将数据采集指令添加至目标指令信息中,来实现对目标指令信息进行埋点。本公开实施例中,由于代理类中包括目标类中的指令以及数据采集指令,因此该代理类既能够实现原来的目标类的功能,又能够采集在目标指令信息运行时产生的数据,通过将原来的目标类替换为该代理类,能够在保证目标指令信息不受影响的同时,实现对目标指令信息进行埋点。

图3是一示例性实施例示出的一种埋点检测方法的流程图,参见图3,该埋点检测方法的过程包括编码期和编译期。其中,目标指令信息为目标类中的目标方法,切面指令信息为切面类,第一标记为“@Report”注解,第二标记为“@Aspect”注解,类标记为“@TargetClass”注解,方法标记为“@Insert”注解。

编码期:编码期包括创建目标指令信息和创建切面指令信息的过程。

(1)创建目标指令信息:为待埋点的方法添加“@Report”注解,得到目标方法,该目标方法即为目标指令信息,该目标指令信息所在的类为目标类。

(2)创建切面指令信息:为切面类添加“@Aspect”注解,在切面类中输入数据采集指令和切点指令,该数据采集指令为埋点方法,该埋点方法又称为通知,该切点指令为切点。切点指令中包括添加有“@TargetClass”注解的类标识和添加有“@Insert”注解的方法标识,该类标识用于指示目标类,该方法标识用于指示目标方法。该切面类即为切面指令信息。

编译期:编译期包括类文件生成前的过程和类文件生成后的过程。

(1)类文件生成前:借助APT来检测添加有“@Report”注解的目标方法是否存在关联的切面类,同时检测添加有“@Aspect”注解的切面类是否存在关联的目标方法。

如果发现至少一个目标方法不存在关联的切面类,或者至少一个切面类不存在关联的目标方法,则停止编译,并输出编译失败的提示信息。如果确定每个目标方法均存在关联的切面类,且每个切面类均存在关联的目标方法,则继续编译,生成多个类文件。

(2)类文件生成后:借助Transform插件遍历多个类文件,对于遍历的每个类文件,检测该类文件中是否存在“@Aspect”注解,如果不存在,则继续遍历下一个类文件,如果存在,则根据该类文件中的切面类和该切面类中的切点指示的目标类,生成对应的代理类,并使用该代理类替换原来的目标类,并继续回调Transform插件遍历下一个类文件,从而将切面类中的埋点方法切入目标类中,为目标类添加了用于埋点的代码逻辑。

上述埋点检测方法中,采用切面的方式,将埋点方法切入目标类,同时借助APT和Java注解,在编译阶段对埋点的有效性进行检测,能够避免由于误删指令导致埋点失效的问题。

本公开实施例提供的方法中,目标指令信息为待埋点的指令信息,切面指令信息为用于埋点的指令信息,其中目标指令信息与切面指令信息关联是指切面指令信息用于采集该目标指令信息在运行时产生的数据,则通过在指令集合中检测每个目标指令信息关联的切面指令信息,以及每个切面指令信息关联的目标指令信息,来确定每个目标指令信息均存在关联的切面指令信息,以及每个切面指令信息均存在关联的目标指令信息,从而确定能够实现对每个目标指令信息进行埋点,也能够发挥每个切面指令信息的埋点功能,也即是指令集合中的埋点均有效。本公开实施例的方法实现了自动检测埋点的有效性,能够节约人力和时间,提高了埋点检测的效率。

图4是根据一示例性实施例示出的一种埋点检测装置的框图。参见图4,该装置包括检测单元401和第一检测结果输出单元402。

检测单元401,被配置为执行在指令集合中,检测与每个目标指令信息关联的切面指令信息,以及检测与每个切面指令信息关联的目标指令信息,其中目标指令信息为待埋点的指令信息,切面指令信息为用于埋点的指令信息,目标指令信息与切面指令信息关联是指切面指令信息用于采集目标指令信息在运行时产生的数据;

第一检测结果输出单元402,被配置为执行响应于指令集合中的每个目标指令信息均存在关联的切面指令信息,且每个切面指令信息均存在关联的目标指令信息,输出第一检测结果,第一检测结果用于表示指令集合的埋点有效。

本公开实施例提供的装置,目标指令信息为待埋点的指令信息,切面指令信息为用于埋点的指令信息,其中目标指令信息与切面指令信息关联是指切面指令信息用于采集该目标指令信息在运行时产生的数据,则通过在指令集合中检测每个目标指令信息关联的切面指令信息,以及每个切面指令信息关联的目标指令信息,来确定每个目标指令信息均存在关联的切面指令信息,以及每个切面指令信息均存在关联的目标指令信息,从而确定能够实现对每个目标指令信息进行埋点,也能够发挥每个切面指令信息的埋点功能,也即是指令集合中的埋点均有效。本公开实施例的装置实现了自动检测埋点的有效性,能够节约人力和时间,提高了埋点检测的效率。

在一些实施例中,参见图5,检测单元401,包括:

第一检测子单元411,被配置为执行检测包括第一标记的每个指令信息,将检测到的指令信息确定为目标指令信息,第一标记用于识别第一标记所在的指令信息为目标指令信息;

第二检测子单元421,被配置为执行检测与每个目标指令信息关联的,且包括第二标记的指令信息,将检测到的指令信息确定为切面指令信息,第二标记用于识别第二标记所在的指令信息为切面指令信息。

在一些实施例中,参见图5,第二检测子单元421,被配置为执行:

对于检测到的每个目标指令信息,获取目标指令信息对应的指令标识,指令标识为目标指令信息的唯一标识;

检测包括第二标记和切点指令的指令信息,将检测到的指令信息确定为切面指令信息,其中切点指令包括指令标识和切点标记,切点标记用于指示切面指令信息与指令标识对应的目标指令信息关联。

在一些实施例中,参见图5,第二检测子单元421,被配置为执行:

在指令集合中检测包括第二标记、切点指令和数据采集指令的指令信息,将检测到的指令信息确定为切面指令信息,切点标记还用于指示将数据采集指令添加至指令标识对应的目标指令信息中,以采集目标指令信息运行时产生的数据。

在一些实施例中,指令标识包括目标指令信息所在的目标类对应的类标识和目标指令信息所属的方法对应的方法标识,切点标记包括类标记和方法标记,切点指令包括添加有类标记的类标识以及添加有方法标记的方法标识。

在一些实施例中,参见图5,检测单元401,包括:

第三检测子单元431,被配置为执行检测包括第二标记的每个指令信息,将检测到的指令信息确定为切面指令信息;

第四检测子单元441,被配置为执行检测与每个切面指令信息关联的,且包括第一标记的指令信息,将检测到的指令信息确定为目标指令信息。

在一些实施例中,参见图5,第四检测子单元441,被配置为执行:

对于检测到的每个切面指令信息,获取切面指令信息中的切点指令,切点指令包括指令标识和切点标记,切点标记用于指示切面指令信息与指令标识对应的目标指令信息关联;

检测指令标识对应的、且包括第一标记的指令信息,将检测到的指令信息确定为目标指令信息。

在一些实施例中,参见图5,切点标记包括类标记和方法标记,指令标识包括类标识和方法标识,切点指令包括添加有类标记的类标识和添加有方法标记的方法标识,第四检测子单元441,被配置为执行:

在指令集合中检测类标识指示的目标类;

在目标类中检测方法标识指示的、且包括第一标记的指令信息,将检测到的指令信息确定为目标指令信息。

在一些实施例中,参见图5,该埋点检测装置还包括:

编译单元403,被配置为执行对指令集合进行编译,得到多个类文件;

指令信息获取单元404,被配置为执行从任一类文件中获取包括第二标记的切面指令信息,切面指令信息中包括数据采集指令和切点指令,切点指令包括指令标识和切点标记,切点标记用于指示切面指令信息与指令标识对应的目标指令信息关联;

类文件获取单元405,被配置为执行在多个类文件中确定包括指令标识对应的目标指令信息的目标类文件;

指令添加单元406,被配置为执行将数据采集指令添加至目标类文件中的目标指令信息中。

在一些实施例中,参见图5,指令添加单元406,包括:

目标类确定子单元416,被配置为执行在目标类文件中确定目标指令信息所在的目标类;

代理类生成子单元426,被配置为执行基于目标类和数据采集指令生成代理类,代理类中包括目标类中的指令以及数据采集指令;

替换子单元436,被配置为执行将目标类文件中的目标类替换为代理类。

在一些实施例中,参见图5,该埋点检测装置还包括:

第一标记添加单元407,被配置为执行为待埋点的指令信息添加第一标记,得到目标指令信息;

第二标记添加单元408,被配置为执行为用于埋点的指令信息添加第二标记,得到切面指令信息;

集合确定单元409,被配置为执行基于目标指令信息和切面指令信息,确定指令集合。

在一些实施例中,参见图5,该埋点检测装置还包括:

第二检测结果输出单元410,被配置为执行响应于指令集合中的至少一个目标指令信息不存在关联的切面指令信息,或者至少一个切面指令信息不存在关联的目标指令信息,输出第二检测结果,第二检测结果用于表示指令集合中的埋点无效。

关于上述实施例中的装置,其中各个单元执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

图6是根据一示例性实施例示出的一种电子设备600的结构框图。该电子设备600可以是便携式移动终端,比如:智能手机、平板电脑、MP3播放器(Moving Picture ExpertsGroup Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving PictureExperts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。电子设备600还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。

电子设备600包括有:处理器601和存储器602。

处理器601可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器601可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器601也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器601可以集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器601还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。

存储器602可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器602还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器602中的非暂态的计算机可读存储介质用于存储至少一条程序代码,该至少一条程序代码用于被处理器601所执行以实现本公开中方法实施例提供的埋点检测方法。

在一些实施例中,电子设备600还可选包括有:外围设备接口603和至少一个外围设备。处理器601、存储器602和外围设备接口603之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口603相连。具体地,外围设备包括:射频电路604、显示屏605、摄像头组件606、音频电路607、定位组件608和电源609中的至少一种。

外围设备接口603可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器601和存储器602。在一些实施例中,处理器601、存储器602和外围设备接口603被集成在同一芯片或电路板上;在一些其他实施例中,处理器601、存储器602和外围设备接口603中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。

射频电路604用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路604通过电磁信号与通信网络以及其他通信设备进行通信。射频电路604将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路604包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路604可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路604还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本公开对此不加以限定。

显示屏605用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏605是触摸显示屏时,显示屏605还具有采集在显示屏605的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器601进行处理。此时,显示屏605还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏605可以为一个,设置在电子设备600的前面板;在另一些实施例中,显示屏605可以为至少两个,分别设置在电子设备600的不同表面或呈折叠设计;在另一些实施例中,显示屏605可以是柔性显示屏,设置在电子设备600的弯曲表面上或折叠面上。甚至,显示屏605还可以设置成非矩形的不规则图形,也即异形屏。显示屏605可以采用LCD(Liquid Crystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。

摄像头组件606用于采集图像或视频。可选地,摄像头组件606包括前置摄像头和后置摄像头。前置摄像头设置在电子设备的前面板,后置摄像头设置在电子设备的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件606还可以包括闪光灯。闪光灯可以是单色温闪光灯,也可以是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,可以用于不同色温下的光线补偿。

音频电路607可以包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器601进行处理,或者输入至射频电路604以实现语音通信。出于立体声采集或降噪的目的,麦克风可以为多个,分别设置在电子设备600的不同部位。麦克风还可以是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器601或射频电路604的电信号转换为声波。扬声器可以是传统的薄膜扬声器,也可以是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅可以将电信号转换为人类可听见的声波,也可以将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路607还可以包括耳机插孔。

定位组件608用于定位电子设备600的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件608可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯定位系统或欧盟的伽利略定位系统的定位组件。

电源609用于为电子设备600中的各个组件进行供电。电源609可以是交流电、直流电、一次性电池或可充电电池。当电源609包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。

本领域技术人员可以理解,图6中示出的结构并不构成对电子设备600的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。

在示例性实施例中,还提供了一种计算机可读存储介质,当计算机可读存储介质中的程序代码由电子设备的处理器执行时,使得电子设备能够执行上述埋点检测方法中电子设备所执行的步骤。可选地,计算机可读存储介质可以是非临时性计算机可读存储介质,例如,所述非临时性计算机可读存储介质可以是ROM(只读存储器,Read Only Memory)、RAM(随机存取存储器,Random Access Memory)、CD-ROM(只读光盘,Compact Disc Read-OnlyMemory)、磁带、软盘和光数据存储设备等。

在示例性实施例中,还提供了一种计算机程序产品,当计算机程序产品中的程序代码由电子设备的处理器执行时,使得电子设备能够执行上述埋点检测方法中电子设备所执行的步骤。

本领域技术人员在考虑说明书及实践这里的公开后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。

应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。

相关技术
  • 埋点信息的上报方法、埋点方法、装置、介质、电子设备
  • 一种埋点测试方法、装置、埋点管理系统和存储介质
技术分类

06120113195630