信息获取方法、介质、装置和计算设备与流程

文档序号:14249314阅读:177来源:国知局
信息获取方法、介质、装置和计算设备与流程

本发明的实施方式涉及通信及计算机技术领域,更具体地,本发明的实施方式涉及信息获取方法、介质、装置和计算设备。



背景技术:

本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。

技术埋点是数据采集领域的术语,指的是针对特定代码方法中的实时参数进行捕获、处理和发送的相关技术及其实施过程,通过获取这些参数信息来分析程序的运行状况。现有的技术埋点方案需要人为在相关的业务代码中插入相关的埋点逻辑代码,以获取对应的参数变量值。



技术实现要素:

由于现有的技术埋点方案需要人为插入埋点代码,因此不仅费时费力,而且浪费了开发资源。同时,现有的技术埋点方案对于事先没有设置埋点的位置,则无法获取相关的数据。

为此,非常需要一种改进的信息获取方案,进而至少确保无需事先在业务代码中加入技术埋点就能够获取到目标类在运行时的相关参数,以节省开发资源。

在本上下文中,本发明的实施方式期望提供一种信息获取方法、介质、装置和计算设备。

在本发明实施方式的第一方面中,提供了一种信息获取方法,包括:创建目标类的子类,并将所述子类与所述目标类进行关联;将所述目标类中的目标方法复制到所述子类中,得到镜像方法;将所述镜像方法的指针修改为指向所述目标方法的实现函数,并将所述目标方法的指针修改为指向一消息转发函数;通过定义的新函数替换所述消息转发函数,并通过所述新函数获取所述目标类在执行时的相关参数的信息。

在本发明的一些实施方式中,基于前述方案,创建目标类的子类,包括:通过定义的新方法替换所述目标类中用于创建类实例的方法;通过所述新方法创建所述目标类的子类。

在本发明的一些实施方式中,基于前述方案,将所述子类与所述目标类进行关联,包括:根据所述子类的类名与所述目标类的类名,将所述子类与所述目标类进行关联。

在本发明的一些实施方式中,基于前述方案,根据所述子类的类名与所述目标类的类名,将所述子类与所述目标类进行关联,包括:获取所述目标类的类名;向所述目标类的类名添加前缀或后缀,以生成所述子类的类名。

在本发明的一些实施方式中,基于前述方案,所述的方法还包括:获取用于对需要获取的信息进行配置的配置文件;根据所述配置文件确定所述目标类和所述目标方法。

在本发明的一些实施方式中,基于前述方案,所述配置文件中包含有用于标识需要获取信息的类的第一字段,用于标识需要获取信息的方法的第二字段,以及用于标识不需要获取信息的方法的第三字段。

在本发明的一些实施方式中,基于前述方案,根据所述配置文件确定所述目标类和所述目标类方法,包括:根据所述配置文件中的所述第一字段的值,确定所述目标类;根据所述配置文件中的所述第二字段和所述第三字段的值,确定所述目标方法。

在本发明的一些实施方式中,基于前述方案,在通过所述新函数获取所述目标类在执行时的相关参数的信息之后,还包括:根据参数的类型编码对获取到的相关参数的信息进行区分处理,并记录在指定文件中。

在本发明实施方式的第二方面中,提供了一种介质,其上存储有程序,该程序被处理器执行时实现如上述实施方式中第一方面所述的方法。

在本发明实施方式的第三方面中,提供了一种信息获取装置,包括:创建单元,用于创建目标类的子类;关联单元,用于将所述子类与所述目标类进行关联;复制单元,用于将所述目标类中的目标方法复制到所述子类中,得到镜像方法;处理单元,用于将所述镜像方法的指针修改为指向所述目标方法的实现函数,并将所述目标方法的指针修改为指向一消息转发函数;第一获取单元,用于通过定义的新函数替换所述消息转发函数,并通过所述新函数获取所述目标类在执行时的相关参数的信息。

在本发明的一些实施方式中,基于前述方案,所述创建单元配置为:通过定义的新方法替换所述目标类中用于创建类实例的方法;通过所述新方法创建所述目标类的子类。

在本发明的一些实施方式中,基于前述方案,所述关联单元配置为:根据所述子类的类名与所述目标类的类名,将所述子类与所述目标类进行关联。

在本发明的一些实施方式中,基于前述方案,所述关联单元配置为:获取所述目标类的类名;向所述目标类的类名添加前缀或后缀,以生成所述子类的类名。

在本发明的一些实施方式中,基于前述方案,所述的装置还包括:第二获取单元,用于获取用于对需要获取的信息进行配置的配置文件;确定单元,用于根据所述配置文件确定所述目标类和所述目标方法。

在本发明的一些实施方式中,基于前述方案,所述配置文件中包含有用于标识需要获取信息的类的第一字段,用于标识需要获取信息的方法的第二字段,以及用于标识不需要获取信息的方法的第三字段。

在本发明的一些实施方式中,基于前述方案,所述确定单元配置为:根据所述配置文件中的所述第一字段的值,确定所述目标类;根据所述配置文件中的所述第二字段和所述第三字段的值,确定所述目标方法。

在本发明的一些实施方式中,基于前述方案,所述的装置还包括:记录单元,用于根据参数的类型编码对获取到的相关参数的信息进行区分处理,并记录在指定文件中。

在本发明实施方式的第四方面中,提供了一种计算设备,包括:处理器和存储器,所述存储器存储有可执行指令,所述处理器用于调用所述存储器存储的可执行指令执行如上述实施方式中第一方面所述的方法。

根据本发明实施方式的信息获取方法、介质、装置和计算设备,通过创建目标类的子类,并将所述子类与目标类进行关联,同时将目标类中的目标方法复制到子类中得到镜像方法,并将镜像方法的指针修改为指向目标方法的实现函数,使得目标类的中的目标方法依然能够正常执行,避免了对目标类的实现过程造成干扰。而通过将目标方法的指针修改为指向一消息转发函数,并通过定义的新函数替换所述消息转发函数,使得能够通过新函数来获取目标类在执行时的相关参数的信息,无需事先在业务代码中加入技术埋点,节省了开发资源。

根据本发明实施方式的信息获取方法、介质、装置和计算设备,通过获取用于对需要获取的信息进行配置的配置文件,使得能够通过动态配置的方式来确定需要获取信息的目标类及目标方法,提高了信息获取的灵活性,解决了现有方案中由于事先没有设置埋点而无法获取相关信息的问题。

附图说明

通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:

图1示意性示出了根据本发明的实施例的信息获取方法的流程图;

图2示出了根据本发明的实施例的通过new_allocwithzone方法替换allocwithzone方法的示意图;

图3示意性示出了根据本发明的实施例的信息获取装置的框图。

在附图中,相同或对应的标号表示相同或对应的部分。

具体实施方式

下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本发明更加透彻和完整,并且能够将本发明的范围完整地传达给本领域的技术人员。

本领域技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本发明可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。

根据本发明的实施方式,提出了一种信息获取方法、介质、装置和计算设备。

在本文中,需要理解的是,所涉及的术语“aop”全称为aspectorientedprogramming,中文释义为面向切面编程,aop面对的是处理过程中的某个步骤或阶段。在程序运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面编程。借助aop,甚至不用修改一行代码,就可以修改现有程序的行为。

所涉及的术语“hook”是可以将目标进程的某一个函数替换成一个自定义函数执行的技术,利用hook技术可以达到修改目标进程的某个函数的执行逻辑的功能。通俗来讲,hook是通过截取函数调用来改变或增加系统方法的实现行为的技术。

此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。

下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。

发明概述

本发明人发现,现有的技术埋点方案需要人为插入埋点代码,不仅费时费力,而且浪费了开发资源。同时,现有的技术埋点方案对于事先没有设置埋点的位置,则无法获取相关的数据。

因此,本发明的实施方式提供了一种信息获取方法、介质、装置和计算设备,使得无需事先在业务代码中加入技术埋点就能够获取到目标类在运行时的相关参数,节省了开发资源。同时,能够通过动态配置的方式来确定需要获取信息的目标类及目标方法,解决了现有方案中由于事先没有设置埋点而无法获取相关信息的问题。

在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。

应用场景总览

需要注意的是,下述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。

应用场景:技术人员在需要获取目标类中的目标方法在执行时的相关参数的信息时,可以通过配置文件动态指定该目标类和目标方法,进而系统能够根据该配置文件确定所述的目标类及目标方法,然后根据本发明实施方式中的方案来获取目标类及目标方法在执行时的相关参数的信息,提高了信息获取的灵活性。

示例性方法

下面结合上述的应用场景,参考图1和图2来描述根据本发明示例性实施方式的信息获取方法。

图1示意性示出了根据本发明的实施例的信息获取方法的流程图。

参照图1所示,根据本发明的实施例的信息获取方法,包括:

步骤s10,创建目标类的子类,并将所述子类与所述目标类进行关联。

在本发明的示例性实施方式中,步骤s10中创建目标类的子类可以包括:通过定义的新方法替换所述目标类中用于创建类实例的方法;通过所述新方法创建所述目标类的子类。

比如对于ios系统,可以定义新方法new_allocwithzone来替换allocwithzone(ios系统中创建类实例的方法)方法,然后通过定义的新方法创建目标类的子类。可选地,可以利用methodswizzling来替换allocwithzone方法,即对allocwithzone方法进行hook处理。

在本发明的示例性实施方式中,步骤s10中将创建的子类与目标类进行关联可以包括:根据子类的类名与目标类的类名,将所述子类与所述目标类进行关联。比如可以向目标类的类名添加前缀或后缀,然后作为子类的类名。

步骤s12,将所述目标类中的目标方法复制到所述子类中,得到镜像方法。

在本发明的实施例中,确定目标类及目标类中的目标方法可以是通过配置文件来确定的。具体地,可以获取用于对需要获取的信息进行配置的配置文件,然后根据该配置文件确定目标类和目标方法。该实施例的技术方案使得能够通过动态配置的方式来确定需要获取信息的目标类及目标方法,提高了信息获取的灵活性,解决了现有方案中由于事先没有设置埋点而无法获取相关信息的问题。

可选地,该配置文件可以包含用于标识需要获取信息的类的第一字段,用于标识需要获取信息的方法的第二字段,以及用于标识不需要获取信息的方法的第三字段。进而可以根据该配置文件中的第一字段的值确定所述目标类,并根据配置文件中的第二字段和第三字段的值,确定所述目标方法。

步骤s14,将所述镜像方法的指针修改为指向所述目标方法的实现函数,并将所述目标方法的指针修改为指向一消息转发函数。

比如对于ios系统,可以将目标方法的imp指针修改为指向forwardinvocation,进而目标方法在实现时会被转发至forwardinvocation。

步骤s16,通过定义的新函数替换所述消息转发函数,并通过所述新函数获取所述目标类在执行时的相关参数的信息。

比如对于ios系统,可以定义新函数new_forwardinvocation来替换forwardinvocation函数,然后在new_forwardinvocation函数中截取目标类在执行时的相关参数的信息。类似的,可以利用methodswizzling来替换forwardinvocation函数,即对forwardinvocation函数进行hook处理。

在本发明的一些实施方式中,可选地,在通过所述新函数获取所述目标类在执行时的相关参数的信息之后,还包括:根据参数的类型编码对获取到的相关参数的信息进行区分处理,并记录在指定文件中。

需要说明的是,该指定文件可以是日志文件,进而可以通过日志文件来查看获取到的相关参数的信息。同时,由于镜像方法的指针指向原方法的实现函数,因此可以通过调用镜像方法保证原有的程序逻辑不会受到破坏。

以下以ios系统为例,对本发明实施方式的信息获取方法进行详细阐述,主要包含以下2个过程:

1、类全量方法的hook实现:

若要实现对任意的类方法都能动态添加相关技术埋点的功能,则需要对类的全量方法进行methodswizzling,具体实现步骤如下:

(1)通过methodswizzling给origclass(本实施例中以该类进行说明,其它类的处理方法类似)添加new_allocwithzone实现,并且将该实现与原有allocwithzone交换。在new_allocwithzone的实现中,将返回值替换成proxyclass,具体过程如图2所示。

(2)动态添加origclass的子类proxyclass,根据origclassname(origclass类的类名)和proxyclassname(proxyclass类的类名)的关系建立两者之间的关系索引。可选地,proxyclassname可以为origclassname加上一个固定的前缀或后缀。

(3)遍历origclass类中的方法,将origclass类中的方法复制到proxyclass中,得到对应的镜像方法。其中,proxyclass中的镜像方法的imp指针指向origclass类中原方法的实现函数,origclass类中原方法的imp指针指向forwardinvocation。如此,origclass类中的方法都会直接指向forwardinvocation,之后可以统一针对forwardinvocation进行处理。

(4)将proxyclass类中的forwardinvocation方法替换为runtimeprofileforwardinvocation方法。可选地,可以通过methodswizzling来进行替换。进而可以在runtimeprofileforwardinvocation方法中将输入参数、返回值的具体值等按照typeencodings(类型编码)来区分处理,然后取出来记录到日志文件中。

同时在runtimeprofileforwardinvocation中找到对应的invocation,根据invocation中的selector(类方法)找到对应的proxyclass中的镜像方法,调用该镜像方法,由于该镜像方法的imp指针指向原方法的实现函数,因此可以保证原有的程序逻辑不会受到破坏。

2、埋点目标定制化

经过上述的类全量方法的hook之后,可以在程序运行时实时获取一个类的全部方法执行的日志。为了达到动态配置埋点的目的,实现截取的类和方法的目标定制化,可以配置一个文件(如json格式的文件),从该文件中读取目标类和目标方法。

在本发明的一个实施例中,可以在“objects”字段中定义一个数组,该数组内部包含一个特定的htclass对象类型。htclass中有三个字段,分别为:

“classname”:目标类的类名称;

“inclued-sel”:一个数组,内部包含目标的selector的名称。若为空,则会可以将该目标类下面的所有方法都视为目标,但是在“exclude_sel”中的类方法除外;

“exclude-sel”:一个数组,内部包含selector的名称,代表不需要对这些selector进行处理。

通过本发明实施例的技术方案,能够实现对类的全方法或部分方法的调用顺序及相关参数值进行截获并打印在日志文件中。

在上述针对ios系统的实施例中,通过aop的方式,利用ios系统在运行时的特性,达到无需事先在业务中加入任何技术埋点也能获取到目标函数在运行时的相关参数信息的能力,并且可以实现与服务端的接口化配合,以由服务端通过配置文件动态配置埋点信息,节省了客户端的开发资源。

需要说明的是:上述实施例以ios系统为例对本发明实施例的信息获取方法进行了详细阐述,本领域技术人员需要理解的是,对于其它的操作系统,同样可以适用于本发明实施例的信息获取方法。

示例性介质

在介绍了本发明示例性实施方式的方法之后,接下来,对本发明示例性实施方式的介质进行说明。

在一些可能的实施方式中,本发明的各个方面还可以实现为一种介质,其上存储有程序代码,当所述程序代码被设备的处理器执行时用于实现本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的信息获取方法中的步骤。

具体地,所述设备的处理器执行所述程序代码时用于实现如下步骤:创建目标类的子类,并将所述子类与所述目标类进行关联;将所述目标类中的目标方法复制到所述子类中,得到镜像方法;将所述镜像方法的指针修改为指向所述目标方法的实现函数,并将所述目标方法的指针修改为指向一消息转发函数;通过定义的新函数替换所述消息转发函数,并通过所述新函数获取所述目标类在执行时的相关参数的信息。

在本发明的一些实施方式中,所述设备的处理器执行所述程序代码时用于实现如下步骤:通过定义的新方法替换所述目标类中用于创建类实例的方法;通过所述新方法创建所述目标类的子类。

在本发明的一些实施方式中,所述设备的处理器执行所述程序代码时用于实现如下步骤:根据所述子类的类名与所述目标类的类名,将所述子类与所述目标类进行关联。

在本发明的一些实施方式中,所述设备的处理器执行所述程序代码时用于实现如下步骤:获取所述目标类的类名;向所述目标类的类名添加前缀或后缀,以生成所述子类的类名。

在本发明的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:获取用于对需要获取的信息进行配置的配置文件;根据所述配置文件确定所述目标类和所述目标方法。

在本发明的一些实施方式中,基于前述方案,所述配置文件中包含有用于标识需要获取信息的类的第一字段,用于标识需要获取信息的方法的第二字段,以及用于标识不需要获取信息的方法的第三字段。

在本发明的一些实施方式中,所述设备的处理器执行所述程序代码时用于实现如下步骤:根据所述配置文件中的所述第一字段的值,确定所述目标类;根据所述配置文件中的所述第二字段和所述第三字段的值,确定所述目标方法。

在本发明的一些实施方式中,所述设备的处理器执行所述程序代码时还用于实现如下步骤:在通过所述新函数获取所述目标类在执行时的相关参数的信息之后,根据参数的类型编码对获取到的相关参数的信息进行区分处理,并记录在指定文件中。

需要说明的是:上述的介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是但不限于:电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。

可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于:电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线、光缆、rf等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如java、c++等,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

示例性装置

在介绍了本发明示例性实施方式的介质之后,接下来,参考图3对本发明示例性实施方式的信息获取装置300进行说明。

图3示意性示出了根据本发明的实施例的信息获取装置的框图。

参照图3所示,根据本发明的实施例的信息获取装置300,包括:创建单元302、关联单元304、复制单元306、处理单元308和第一获取单元310。

具体地,创建单元302用于创建目标类的子类;关联单元304用于将所述子类与所述目标类进行关联;复制单元306用于将所述目标类中的目标方法复制到所述子类中,得到镜像方法;处理单元308用于将所述镜像方法的指针修改为指向所述目标方法的实现函数,并将所述目标方法的指针修改为指向一消息转发函数;第一获取单元310用于通过定义的新函数替换所述消息转发函数,并通过所述新函数获取所述目标类在执行时的相关参数的信息。

在本发明的一些实施方式中,基于前述方案,所述创建单元302配置为:通过定义的新方法替换所述目标类中用于创建类实例的方法;通过所述新方法创建所述目标类的子类。

在本发明的一些实施方式中,基于前述方案,所述关联单元304配置为:根据所述子类的类名与所述目标类的类名,将所述子类与所述目标类进行关联。

在本发明的一些实施方式中,基于前述方案,所述关联单元304配置为:获取所述目标类的类名;向所述目标类的类名添加前缀或后缀,以生成所述子类的类名。

在本发明的一些实施方式中,基于前述方案,所述的装置300还包括:第二获取单元312,用于获取用于对需要获取的信息进行配置的配置文件;确定单元314,用于根据所述配置文件确定所述目标类和所述目标方法。

在本发明的一些实施方式中,基于前述方案,所述配置文件中包含有用于标识需要获取信息的类的第一字段,用于标识需要获取信息的方法的第二字段,以及用于标识不需要获取信息的方法的第三字段。

在本发明的一些实施方式中,基于前述方案,所述确定单元314配置为:根据所述配置文件中的所述第一字段的值,确定所述目标类;根据所述配置文件中的所述第二字段和所述第三字段的值,确定所述目标方法。

在本发明的一些实施方式中,基于前述方案,所述的装置300还包括:记录单元316,用于根据参数的类型编码对获取到的相关参数的信息进行区分处理,并记录在指定文件中。

示例性计算设备

在介绍了本发明示例性实施方式的方法、介质和装置之后,接下来,介绍根据本发明的另一示例性实施方式的计算设备。

所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。

在一些可能的实施方式中,根据本发明实施方式的计算设备可以至少包括至少一个处理器、以及至少一个存储器。其中,所述存储器存储有程序代码,当所述程序代码被所述处理器执行时,使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的信息获取方法中的步骤。例如,所述处理器可以执行如图1中所示的步骤s10,创建目标类的子类,并将所述子类与所述目标类进行关联;步骤s12,将所述目标类中的目标方法复制到所述子类中,得到镜像方法;步骤s14,将所述镜像方法的指针修改为指向所述目标方法的实现函数,并将所述目标方法的指针修改为指向一消息转发函数;步骤s16,通过定义的新函数替换所述消息转发函数,并通过所述新函数获取所述目标类在执行时的相关参数的信息。

应当注意,尽管在上文详细描述中提及了信息获取装置的若干单元或子单元,但是这种划分仅仅是示例性的,并非是强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多模块或单元的特征和功能可以在一个模块或单元中具体化。反之,上文描述的一个模块或单元的特征和功能可以进一步划分为由多个模块或单元来具体化。

此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。

虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所发明的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1