CN104391787B - 一种针对目标方法的监控、热切入方法及装置 - Google Patents
一种针对目标方法的监控、热切入方法及装置 Download PDFInfo
- Publication number
- CN104391787B CN104391787B CN201410643169.9A CN201410643169A CN104391787B CN 104391787 B CN104391787 B CN 104391787B CN 201410643169 A CN201410643169 A CN 201410643169A CN 104391787 B CN104391787 B CN 104391787B
- Authority
- CN
- China
- Prior art keywords
- code
- bytecode
- goal approach
- agent process
- equations
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
一种针对目标方法的监控、热切入方法及装置。本发明公开了一种针对目标方法的监控方法,用于解决集成测试的效率较低、测试时间过长的技术问题。所述方法包括:在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。本发明还公开了一种热切入方法,及相应的装置。
Description
技术领域
本发明涉及计算机技术领域,特别涉及一种针对目标对象的监控、热切入方法及装置。
背景技术
在基于Web(网页)应用的项目开发过程中,各个模块之间的集成测试通常效率都很低。开发人员要测试自己所属模块的代码时,通常都要从前台界面发起端到端的业务,才能触发到自己的代码。而在集成测试过程中,各个模块都可能导致端到端的业务无法正常完成,这样导致开发人员总是要等待其他模块的修复,在业务通畅后才能测试到自己的代码。而且端到端业务的流程复杂,耗时很长,在集成测试环境上调测自己的代码十分困难。
例如,要开发一个购票软件,整个流程可能包括了选票、订票、付款等过程。那么,如果需要对付款模块对应的代码进行测试,就必须等到选票、订票等过程均完成后才能测试,在这个过程中,如果前面的选票、订票等任意一个过程中间出现故障,流程无法正常进行,那也就无法对付款模块对应的代码进行测试,只有等前面故障都排除之后才能再进行测试。可见,现在的测试方式效率低下,而且耗时过长。
发明内容
本发明实施例提供一种针对目标对象的监控、热切入方法及装置,用于解决集成测试的效率较低、测试时间过长的技术问题。
本发明的第一方面,提供一种针对目标方法的监控方法,包括:
在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;
通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;
通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。
结合第一方面,在第一方面的第一种可能的实现方式中,启动代理进程,包括:通过虚拟机VirtualMachine类的附加attach方法启动所述代理进程。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,在通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码之前,还包括:
通过所述代理进程,根据执行所述代理进程的入口方法的仪器Instrumentation对象,获取所述调用进程中所有已加载的类的信息;
通过所述代理进程,根据所述调用进程的监控对象,从获取的所有已加载的类的信息中确定所述目标类,进而确定所述目标方法。
结合第一方面或第一方面的第一种可能的实现方式或第二种可能的实现方式,在第一方面的第三种可能的实现方式中,通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码,包括:
通过所述代理进程,使用开源包Javassist在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的第二代码;
通过所述代理进程对所述第二代码进行编译,得到所述第二类字节码。
结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,通过所述代理进程将所述第二类字节码写入所述调用进程,包括:
通过所述代理进程中的Instrumentation对象的一种方法RefineClass方法,将所述第二类字节码写入所述调用进程。
本发明的第二方面,提供一种热切入方法,包括:
在通过调用进程对目标方法进行拦截时,执行所述目标方法对应的第二类字节码;其中,所述第二类字节码为对所述目标方法对应的第二代码进行编译得到的,所述第二代码为在所述目标方法原对应的第一代码中插入切面代码后得到的;
在执行所述第二类字节码的过程中,通过所述切面代码记录本次调用信息,并将所述调用信息作为历史记录进行保存。
结合第二方面,在第二方面的第一种可能的实现方式中,在将所述调用信息作为历史记录进行保存之后,还包括:
从保存的历史记录中选择第一历史记录,并确定重执行所述第一历史记录对应的拦截任务;
对所述第一历史记录进行反序列化,获得所述第一历史记录对应的目标对象以及入参;
根据一种编程语言Java反射机制,对所述目标对象执行的第一目标方法进行拦截,并向所述第一目标方法传入所述入参。
本发明的第三方面,提供一种针对目标方法的监控装置,包括:
启动模块,用于在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;
插入模块,用于通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;
替换模块,用于通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。
结合第三方面,在第三方面的第一种可能的实现方式中,所述启动模块用于启动代理进程,具体为:通过虚拟机VirtualMachine类的附加attach方法启动所述代理进程。
结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,所述装置还包括获取模块和确定模块;
所述获取模块用于:在所述插入模块通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码之前,通过所述代理进程,根据执行所述代理进程的入口方法的仪器Instrumentation对象,获取所述调用进程中所有已加载的类的信息;
所述确定模块用于:通过所述代理进程,根据所述调用进程的监控对象,从获取的所有已加载的类的信息中确定所述目标类,进而确定所述目标方法。
结合第三方面或第三方面的第一种可能的实现方式或第二种可能的实现方式,在第三方面的第三种可能的实现方式中,所述插入模块具体用于:
通过所述代理进程,使用开源包Javassist在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的第二代码;
通过所述代理进程对所述第二代码进行编译,得到所述第二类字节码。
结合第三方面的第三种可能的实现方式,在第三方面的第四种可能的实现方式中,所述替换模块用于通过所述代理进程将所述第二类字节码写入所述调用进程,具体为:
通过所述代理进程中的Instrumentation对象的一种方法RefineClass方法,将所述第二类字节码写入所述调用进程。
本发明的第四方面,提供一种热切入装置,包括:
执行模块,用于在通过调用进程对目标方法进行拦截时,执行所述目标方法对应的第二类字节码;其中,所述第二类字节码为对所述目标方法对应的第二代码进行编译得到的,所述第二代码为在所述目标方法原对应的第一代码中插入切面代码后得到的;
记录模块,用于在执行所述第二类字节码的过程中,通过所述切面代码记录本次调用信息,并将所述调用信息作为历史记录进行保存。
结合第四方面,在第四方面的第一种可能的实现方式中,所述装置还包括选择模块、获取模块和拦截模块;
所述选择模块用于从保存的历史记录中选择第一历史记录,并确定重执行所述第一历史记录对应的拦截任务;
所述获取模块用于对所述第一历史记录进行反序列化,获得所述第一历史记录对应的目标对象以及入参;
所述拦截模块用于根据一种编程语言Java反射机制,对所述目标对象执行的第一目标方法进行拦截,并向所述第一目标方法传入所述入参。
本发明的第五方面,提供一种针对目标方法的监控装置,包括连接到同一总线的存储器和处理器;
所述存储器,用于存储指令;
所述处理器,用于执行所述指令,在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。
结合第五方面,在第五方面的第一种可能的实现方式中,所述处理器用于启动代理进程,具体为:通过虚拟机VirtualMachine类的附加attach方法启动所述代理进程。
结合第五方面或第五方面的第一种可能的实现方式,在第五方面的第二种可能的实现方式中,所述处理器还用于:
执行所述指令,在通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码之前,通过所述代理进程,根据执行所述代理进程的入口方法的仪器Instrumentation对象,获取所述调用进程中所有已加载的类的信息;
通过所述代理进程,根据所述调用进程的监控对象,从获取的所有已加载的类的信息中确定所述目标类,进而确定所述目标方法。
结合第五方面或第五方面的第一种可能的实现方式或第二种可能的实现方式,在第五方面的第三种可能的实现方式中,所述处理器用于通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码,具体为:
通过所述代理进程,使用开源包Javassist在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的第二代码;
通过所述代理进程对所述第二代码进行编译,得到所述第二类字节码。
结合第五方面的第三种可能的实现方式,在第五方面的第四种可能的实现方式中,所述处理器用于通过所述代理进程将所述第二类字节码写入所述调用进程,具体为:
通过所述代理进程中的Instrumentation对象的一种方法RefineClass方法,将所述第二类字节码写入所述调用进程。
本发明的第六方面,提供一种热切入装置,包括连接到同一总线的存储器和处理器;
所述存储器,用于存储指令;
所述处理器,用于执行所述指令,在通过调用进程对目标方法进行拦截时,执行所述目标方法对应的第二类字节码;其中,所述第二类字节码为对所述目标方法对应的第二代码进行编译得到的,所述第二代码为在所述目标方法原对应的第一代码中插入切面代码后得到的;在执行所述第二类字节码的过程中,通过所述切面代码记录本次调用信息,并将所述调用信息作为历史记录进行保存。
结合第六方面,在第六方面的第一种可能的实现方式中,所述处理器还用于:
执行所述指令,在将所述调用信息作为历史记录进行保存之后,从保存的历史记录中选择第一历史记录,并确定重执行所述第一历史记录对应的拦截任务;
对所述第一历史记录进行反序列化,获得所述第一历史记录对应的目标对象以及入参;
根据一种编程语言Java反射机制,对所述目标对象执行的第一目标方法进行拦截,并向所述第一目标方法传入所述入参。
本发明实施例中提供了一种针对目标方法的监控方法,也即提供了一种新的热切入技术,在要监控目标方法时,启动一个代理进程,并将代理进程附加到调用进程上,这样,对目标方法的代码的修改可以由代理进程完成,并最终将修改后的代码写回到调用进程中,用修改后的代码替换原代码。这样,后续在需要调用该目标方法时,可以直接通过调用进程进行调用。
例如,如果要开发一个购票软件,整个流程可能包括了选票、订票、付款等过程。那么,采用本发明实施例中的技术方案后,如果需要对付款模块对应的代码进行测试,无需等到选票、订票等过程均完成后再测试,而可以直接通过调用进程对付款模块对应的代码进行调用即可完成测试,相对于现有技术来说,本发明实施例中的技术方案显然提高了集成测试的效率,减少测试所需的时间。
另外,其他热切入技术不能令修改后的代码替换原代码,在热切入时原代码不能发挥作用,因此只能对新建的对象进行热切入,而对已存在的对象无法实现热切入,而本发明实施例中可以通过代理进程对目标方法的代码进行修改,并可以令修改后的代码替换调用进程中存储的目标方法的原代码,这样就可以实现对任意对象的热切入,而不会只能够像其他热切入技术一样只能对新建的对象进行热切入,本发明实施例中的技术方案应用范围更为广泛,在测试时能够对更多的对象进行测试,实用性较高。
附图说明
图1为本发明实施例中针对目标方法的监控方法的主要流程图;
图2为本发明实施例中热切入方法的主要流程图;
图3为本发明实施例中通过提供的热切入技术进行热切入的实现流程图;
图4为本发明实施例中针对目标方法的监控装置的主要结构框图;
图5为本发明实施例中热切入装置的主要结构框图;
图6为本发明实施例中针对目标方法的监控装置的主要结构示意图;
图7为本发明实施例中热切入装置的主要结构示意图。
具体实施方式
本发明实施例提供一种针对目标方法的监控方法,包括:在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。
本发明实施例中提供了一种针对目标方法的监控方法,也即提供了一种新的热切入技术,在要监控目标方法时,启动一个代理进程,并将代理进程附加到调用进程上,这样,对目标方法的代码的修改可以由代理进程完成,并最终将修改后的代码写回到调用进程中,用修改后的代码替换原代码。这样,后续在需要调用该目标方法时,可以直接通过调用进程进行调用。
例如,如果要开发一个购票软件,整个流程可能包括了选票、订票、付款等过程。那么,采用本发明实施例中的技术方案后,如果需要对付款模块对应的代码进行测试,无需等到选票、订票等过程均完成后再测试,而可以直接通过调用进程对付款模块对应的代码进行调用即可完成测试,相对于现有技术来说,本发明实施例中的技术方案显然提高了集成测试的效率,减少测试所需的时间。
另外,其他热切入技术不能令修改后的代码替换原代码,在热切入时原代码不能发挥作用,因此只能对新建的对象进行热切入,而对已存在的对象无法实现热切入,而本发明实施例中可以通过代理进程对目标方法的代码进行修改,并可以令修改后的代码替换调用进程中存储的目标方法的原代码,这样就可以实现对任意对象的热切入,而不会只能够像其他热切入技术一样只能对新建的对象进行热切入,本发明实施例中的技术方案应用范围更为广泛,在测试时能够对更多的对象进行测试,实用性较高。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
另外,本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,如无特殊说明,一般表示前后关联对象是一种“或”的关系。
本发明实施例中的方法主要针对的是Java(一种面向对象的程序设计语言)语言。
下面结合说明书附图对本发明实施例作进一步详细描述。
请参见图1,本发明实施例提供一种针对目标方法的监控方法,所述方法的主要流程描述如下。
步骤101:在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码。
本发明实施例提出了一种新的AOP(Aspect Oriented Programming,面向切面编程)技术,这种AOP技术无需对现有系统做任何适应性改变,只需把JAR(Java Archive,Java归档文件)包放入目标应用的LIB(library,库文件)目录下就可以使用,实施较为方便。
可选的,本发明实施例中,启动所述代理进程,包括:通过VirtualMachine(虚拟机)类的attach(附加)方法启动所述代理进程。
在SUM(一种函数)提供的tools.jar(一种工具包)包里有个类,名为VirtualMachine。通过VirtualMachine类的attach方法,可以启动所述代理进程,并可以将所述代理进程附加在指定的JVM(Java Virtual Machine,Java虚拟机)进程上,本发明实施例中将所述JVM进程称为所述调用进程。所述代理进程可以与目标进程进行通信,并可以修改目标进程中的数据。
步骤102:通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果。
可选的,本发明实施例中,在通过所述代理进程在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的所述第二类字节码之前,还包括:
通过所述代理进程,根据执行所述代理进程的入口方法的Instrumentation(仪器)对象,获取所述调用进程中所有已加载的类的信息;
通过所述代理进程,根据所述调用进程的监控对象,从获取的所有已加载的类的信息中确定所述目标类,进而确定所述目标方法。
本发明实施例中,所述代理进程的入口方法名为agentmain(主要代理),这个方法类似于Java中的main(主要)方法,是所述代理进程的入口方法。在agentmain方法中,通过Instrumentation对象,可以获取到所述调用进程中所有已加载的类的信息,这样所述代理进程可以知道所述调用进程中共包括有哪些类,而所述调用进程会将所述调用进程的监控对象告知所述代理进程,这样,所述代理进程就能从所述调用进程包括的所有类中确定出所述监控对象对应的所述目标类,进而确定所述目标方法。
可选的,本发明实施例中,通过所述代理进程在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的所述第二类字节码,可以包括:
通过所述代理进程,使用Javassist在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的第二代码;
通过所述代理进程对所述第二代码进行编译,得到所述第二类字节码。
本发明实施例中,在所述代理进程中,使用Javassist(一个开源的分析、编辑和创建Java字节码的类库,也可称为开源包)对所述目标方法对应的所述第一代码进行修改,在所述目标方法的前后插入所述切面代码,得到所述第二代码。在得到所述第二代码后,要对所述第二代码进行编译,得到所述第二类字节码。
步骤103:通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。
可选的,本发明实施例中,通过所述代理进程将所述第二类字节码写入所述调用进程,可以包括:
通过所述代理进程中的Instrumentation对象的RefineClass方法,将所述第二类字节码写入所述调用进程。
本发明实施例中,在所述代理进程中,可以通过Instrumentation对象的RefineClass方法,把修改后的类字节码(即所述第二类字节码)写回到所述调用进程中。
因为所述调用进程中已有与所述目标方法对应的所述第一类字节码,在所述第一类字节码生效时,已经创建了ClassLoader,而在将所述第二类字节码写回到所述调用进程中时,可以令所述第二类字节码替换所述第一类字节码,相当于修改了所述第一类字节码,因此,在所述调用进程中无需为所述第二类字节码再次创建ClassLoader,所述第二类字节码可以通过所述第一类字节码对应的ClassLoader立即生效。在此之后,在调用所述目标方法时都会执行修改后的代码逻辑。
现有技术中存在的热切入技术,不能令修改后的代码替换原代码,在热切入时原代码不能发挥作用,因此只能对新建的对象进行热切入,对已存在的对象无法实现热切入。而本发明实施例中提供的针对目标对象的监控方法,即提出的新的AOP技术,可以通过代理进程对目标方法的代码进行修改,并可以令修改后的代码替换调用进程中存储的目标方法的原代码,这样就可以通过API(Application Programming Interface,应用程序编程接口)对任意方法进行动态切入,即实现对任意对象的热切入,无论目标方法是否属于已存在的对象都可以进行切入,而不会只能够像其他热切入技术一样只能对新建的对象进行热切入,也无需在启动前预定义被切入的目标方法。本发明实施例中的技术方案应用范围更为广泛,在测试时能够对更多的对象进行测试,实用性较高。
请参见图2,基于同一发明构思,本发明实施例提供一种热切入方法,所述方法即是利用图1流程中所介绍的新的AOP技术进行热切入的方法。所述方法的主要流程描述如下。
步骤201:在通过调用进程对目标方法进行拦截时,执行所述目标方法对应的第二类字节码;其中,所述第二类字节码为对所述目标方法对应的第二代码进行编译得到的,所述第二代码为在所述目标方法原对应的第一代码中插入切面代码后得到的。
经过图1流程后,所述调用进程中所述目标方法对应的类字节码已被修改为所述第二类字节码,因此,在通过所述调用进程对所述目标方法进行拦截时,自然要执行所述第二类字节码。具体得到所述第二类字节码的方式在图1流程中已有介绍,此处不多赘述。
步骤202:在执行所述第二类字节码的过程中,通过所述切面代码记录本次调用信息,并将所述调用信息作为历史记录进行保存。
使用本发明实施例中提供的新的AOP技术,对所述目标方法进行拦截后,当所述目标方法被调用时,就会先调用切面中的自定义代码,即执行所述第二类字节码。
而自定义代码中实现了对所述目标方法的入参的持久化保存,会生成针对所述目标方法的一次调用的调用信息。这里所说的持久化可以是写入文件,或可以是写入数据库。为了减少本AOP技术对其他部件的依赖性,本发明实施例可以采取将历史记录写入文件的方式。
例如,可以使用Jbosscache(一个复制的事务处理缓存)来提供将历史记录保存到文件的能力。Jbosscache可以将历史记录直接缓存到文件中,从而变相实现了对历史记录的持久化。本发明实施例中,各个历史记录可以保存在同一文件中,或者也可以保存在不同的文件中。
本发明实施例中可以将该调用信息持久化到文件中,即将该调用信息作为一条历史记录进行保存,这样,下次仍然可以通过该历史记录来调用所述目标方法。
进一步的,本发明实施例中,在将所述调用信息作为历史记录进行保存之后,还包括:
从保存的历史记录中选择第一历史记录,并确定重执行所述第一历史记录对应的拦截任务;
对所述第一历史记录进行反序列化,获得所述第一历史记录对应的目标对象以及入参;
根据一种编程语言Java反射机制,对所述目标对象执行的第一目标方法进行拦截,并向所述第一目标方法传入所述入参。
即,本发明实施例中,在拦截某一目标方法时,可以直接拦截,或者也可以通过与该目标方法对应的历史记录来进行拦截,操作方式可以任意。本发明实施例中,与一个目标方法对应的历史记录可能包括一条,也可能包括多条,如果包括多条,那么可以通过任意一条来拦截该目标方法。
本发明实施例中的新的AOP技术,在实施时可以有专门的操作工具来执行,该操作工具对应有操作界面,可以将该操作工作称为API调测工具。当使用者通过该操作界面选择某个历史记录,发起对API的重新执行时,则系统从文件中读取出该历史记录对应的数据,然后进行以下处理:
从文件中反序列化出历史记录中记载的目标类的对象实例,以及,从文件中反序列化出该历史记录对应的入参对象列表。
通过Java反射机制,直接调用对象实例上的指定方法,即所述目标方法,并传入该历史记录中记载的入参对象。
在本次调用之后,又会生成一条新的历史记录,系统可以继续保存该条新生成的历史记录。
本发明实施例中的热切入方法提供了修改对象实例的方法,该能力依赖于Java的反射机制,可以分析一个对象的结构,将对象的属性按树结构显示出来,并可以修改基本类型的属性的值。
下面用一个较为完整的流程来介绍本发明实施例中的AOP技术的建立方法(即针对目标对象的监控方法)以及利用该AOP技术进行热切入的方法。
请参见图3,为本发明实施例中两个实现过程的完整方法流程图。
1、使用者在目标WEB(网页)应用进程上执行业务,业务触发了目标方法。此时目标方法按原始代码(即所述第一类字节码)执行,不会被API调测工具监控。
2、使用者在API调测工具的操作界面中,选择要监控的目标类的目标方法,启动监控。
3、API调测工具生成监控对象,即需要监控的目标类的目标方法。
4、API调测工具调用JDK(Java Development Kit,Java语言的软件开发工具包)的虚拟机API启动所述代理进程,并向所述代理进程传入所述监控对象。
5、所述代理进程被贴附到调用进程上后,所述代理进程根据监控对象,在所述调用进程所启用的类中查找到要监控的目标类的目标方法。所述代理进程中对目标方法对应的第一代码中注入切面代码。
6、所述代理进程中将修改后的代码(即所述第二代码)转换成新的类字节码,即所述第二类字节码。
7、将新的类字节码通过JDK的重定义类API,写回到所述调用进程。此时完成了对目标方法的监控启动。
8、使用者再次在目标WEB应用进程上执行业务,业务触发所述目标方法时,执行的是切入后的新代码,即所述第二类字节码。
9、所述目标方法的新代码中会调用API调测工具里的切面代码逻辑。
10、切面代码里会记录下所述目标方法的调用记录,包括入参和对象实例等。该调用记录可以被保存,以及,该调用记录也可以称为历史记录。
11、使用者可以在API调测工具中对所述目标方法的历史记录进行重执行。即,通过所述目标方法对应的任一个历史记录重新拦截所述目标方法。
12、API调测工具会通过JAVA反射机制调用所述目标方法,并传入所述历史记录中保存的入参和对象实例。
请参见图4,基于同一发明构思,本发明实施例提供一种针对目标方法的监控装置,所述装置包括启动模块401、插入模块402和替换模块403。
启动模块401,用于在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;
插入模块402,用于通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;
替换模块403,用于通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。
可选的,本发明实施例中,启动模块401用于启动代理进程,具体为:通过虚拟机VirtualMachine类的附加attach方法启动所述代理进程。
可选的,本发明实施例中,所述装置还包括获取模块和确定模块;
所述获取模块用于:在插入模块402通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码之前,通过所述代理进程,根据执行所述代理进程的入口方法的仪器Instrumentation对象,获取所述调用进程中所有已加载的类的信息;
所述确定模块用于:通过所述代理进程,根据所述调用进程的监控对象,从获取的所有已加载的类的信息中确定所述目标类,进而确定所述目标方法。
可选的,本发明实施例中,插入模块402具体用于:
通过所述代理进程,使用开源包Javassist在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的第二代码;
通过所述代理进程对所述第二代码进行编译,得到所述第二类字节码。
可选的,本发明实施例中,替换模块403用于通过所述代理进程将所述第二类字节码写入所述调用进程,具体为:
通过所述代理进程中的Instrumentation对象的一种方法RefineClass方法,将所述第二类字节码写入所述调用进程。
请参见图5,基于同一发明构思,本发明实施例提供一种热切入装置,所述装置包括执行模块501和记录模块502。
执行模块501,用于在通过调用进程对目标方法进行拦截时,执行所述目标方法对应的第二类字节码;其中,所述第二类字节码为对所述目标方法对应的第二代码进行编译得到的,所述第二代码为在所述目标方法原对应的第一代码中插入切面代码后得到的;
记录模块502,用于在执行所述第二类字节码的过程中,通过所述切面代码记录本次调用信息,并将所述调用信息作为历史记录进行保存。
可选的,本发明实施例中,所述装置还包括选择模块、获取模块和拦截模块;
所述选择模块用于从保存的历史记录中选择第一历史记录,并确定重执行所述第一历史记录对应的拦截任务;
所述获取模块用于对所述第一历史记录进行反序列化,获得所述第一历史记录对应的目标对象以及入参;
所述拦截模块用于根据一种编程语言Java反射机制,对所述目标对象执行的第一目标方法进行拦截,并向所述第一目标方法传入所述入参。
请参见图6,基于同一发明构思,本发明实施例提供另一种针对目标方法的监控装置,所述装置与图4中所示的装置可以是同一装置。所述装置包括连接到同一总线600的存储器601和处理器602。其中,存储器601用于存储处理器602执行任务所需的指令;处理器602用于执行存储器601存储的指令,在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。
可选的,本发明实施例中,处理器602用于启动代理进程,具体为:通过虚拟机VirtualMachine类的附加attach方法启动所述代理进程。
可选的,本发明实施例中,处理器602还用于:
执行所述指令,在通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码之前,通过所述代理进程,根据执行所述代理进程的入口方法的仪器Instrumentation对象,获取所述调用进程中所有已加载的类的信息;
通过所述代理进程,根据所述调用进程的监控对象,从获取的所有已加载的类的信息中确定所述目标类,进而确定所述目标方法。
可选的,本发明实施例中,处理器602用于通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码,具体为:
通过所述代理进程,使用开源包Javassist在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的第二代码;
通过所述代理进程对所述第二代码进行编译,得到所述第二类字节码。
可选的,本发明实施例中,处理器602用于通过所述代理进程将所述第二类字节码写入所述调用进程,具体为:
通过所述代理进程中的Instrumentation对象的一种方法RefineClass方法,将所述第二类字节码写入所述调用进程。
请参见图7,基于同一发明构思,本发明实施例提供另一种热切入装置,所述装置与图5中所示的装置可以是同一装置。所述装置包括连接到同一总线700的存储器701和处理器702。其中,存储器701用于存储处理器702执行任务所需的指令;处理器702用于执行存储器701存储的指令,在通过调用进程对目标方法进行拦截时,执行所述目标方法对应的第二类字节码;其中,所述第二类字节码为对所述目标方法对应的第二代码进行编译得到的,所述第二代码为在所述目标方法原对应的第一代码中插入切面代码后得到的;在执行所述第二类字节码的过程中,通过所述切面代码记录本次调用信息,并将所述调用信息作为历史记录进行保存。
可选的,本发明实施例中,处理器702还用于:
执行所述指令,在将所述调用信息作为历史记录进行保存之后,从保存的历史记录中选择第一历史记录,并确定重执行所述第一历史记录对应的拦截任务;
对所述第一历史记录进行反序列化,获得所述第一历史记录对应的目标对象以及入参;
根据一种编程语言Java反射机制,对所述目标对象执行的第一目标方法进行拦截,并向所述第一目标方法传入所述入参。
本发明实施例提供一种针对目标方法的监控方法,包括:在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。
本发明实施例中提供了一种针对目标方法的监控方法,也即提供了一种新的热切入技术,在要监控目标方法时,启动一个代理进程,并将代理进程附加到调用进程上,这样,对目标方法的代码的修改可以由代理进程完成,并最终将修改后的代码写回到调用进程中,用修改后的代码替换原代码。这样,后续在需要调用该目标方法时,可以直接通过调用进程进行调用。
例如,如果要开发一个购票软件,整个流程可能包括了选票、订票、付款等过程。那么,采用本发明实施例中的技术方案后,如果需要对付款模块对应的代码进行测试,无需等到选票、订票等过程均完成后再测试,而可以直接通过调用进程对付款模块对应的代码进行调用即可完成测试,相对于现有技术来说,本发明实施例中的技术方案显然提高了集成测试的效率,减少测试所需的时间。
另外,其他热切入技术不能令修改后的代码替换原代码,在热切入时原代码不能发挥作用,因此只能对新建的对象进行热切入,而对已存在的对象无法实现热切入,而本发明实施例中可以通过代理进程对目标方法的代码进行修改,并可以令修改后的代码替换调用进程中存储的目标方法的原代码,这样就可以实现对任意对象的热切入,而不会只能够像其他热切入技术一样只能对新建的对象进行热切入,本发明实施例中的技术方案应用范围更为广泛,在测试时能够对更多的对象进行测试,实用性较高。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器、随机存取存储器、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以对本申请的技术方案进行了详细介绍,但以上实施例的说明只是用于帮助理解本发明的方法及其核心思想,不应理解为对本发明的限制。本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。
Claims (21)
1.一种针对目标方法的监控方法,其特征在于,包括:
在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;
通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;
通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。
2.如权利要求1所述的方法,其特征在于,启动代理进程,包括:通过虚拟机VirtualMachine类的附加attach方法启动所述代理进程。
3.如权利要求1或2所述的方法,其特征在于,在通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码之前,还包括:
通过所述代理进程,根据执行所述代理进程的入口方法的仪器Instrumentation对象,获取所述调用进程中所有已加载的类的信息;
通过所述代理进程,根据所述调用进程的监控对象,从获取的所有已加载的类的信息中确定所述目标类,进而确定所述目标方法。
4.如权利要求1或2所述的方法,其特征在于,通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码,包括:
通过所述代理进程,使用开源包Javassist在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的第二代码;
通过所述代理进程对所述第二代码进行编译,得到所述第二类字节码。
5.如权利要求4所述的方法,其特征在于,通过所述代理进程将所述第二类字节码写入所述调用进程,包括:
通过所述代理进程中的仪器Instrumentation对象的一种方法RefineClass方法,将所述第二类字节码写入所述调用进程。
6.一种热切入方法,其特征在于,包括:
在通过调用进程对目标方法进行拦截时,执行所述目标方法对应的第二类字节码;其中,所述第二类字节码为对所述目标方法对应的第二代码进行编译得到的,所述第二代码为在所述目标方法原对应的第一代码中插入切面代码后得到的;
在执行所述第二类字节码的过程中,通过所述切面代码记录本次调用信息,并将所述调用信息作为历史记录进行保存。
7.如权利要求6所述的方法,其特征在于,在将所述调用信息作为历史记录进行保存之后,还包括:
从保存的历史记录中选择第一历史记录,并确定重执行所述第一历史记录对应的拦截任务;
对所述第一历史记录进行反序列化,获得所述第一历史记录对应的目标对象以及入参;
根据一种编程语言Java反射机制,对所述目标对象执行的第一目标方法进行拦截,并向所述第一目标方法传入所述入参。
8.一种针对目标方法的监控装置,其特征在于,包括:
启动模块,用于在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;
插入模块,用于通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;
替换模块,用于通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。
9.如权利要求8所述的装置,其特征在于,所述启动模块用于启动代理进程,具体为:通过虚拟机VirtualMachine类的附加attach方法启动所述代理进程。
10.如权利要求8或9所述的装置,其特征在于,所述装置还包括获取模块和确定模块;
所述获取模块用于:在所述插入模块通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码之前,通过所述代理进程,根据执行所述代理进程的入口方法的仪器Instrumentation对象,获取所述调用进程中所有已加载的类的信息;
所述确定模块用于:通过所述代理进程,根据所述调用进程的监控对象,从获取的所有已加载的类的信息中确定所述目标类,进而确定所述目标方法。
11.如权利要求8或9所述的装置,其特征在于,所述插入模块具体用于:
通过所述代理进程,使用开源包Javassist在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的第二代码;
通过所述代理进程对所述第二代码进行编译,得到所述第二类字节码。
12.如权利要求11所述的装置,其特征在于,所述替换模块用于通过所述代理进程将所述第二类字节码写入所述调用进程,具体为:
通过所述代理进程中的仪器Instrumentation对象的一种方法RefineClass方法,将所述第二类字节码写入所述调用进程。
13.一种热切入装置,其特征在于,包括:
执行模块,用于在通过调用进程对目标方法进行拦截时,执行所述目标方法对应的第二类字节码;其中,所述第二类字节码为对所述目标方法对应的第二代码进行编译得到的,所述第二代码为在所述目标方法原对应的第一代码中插入切面代码后得到的;
记录模块,用于在执行所述第二类字节码的过程中,通过所述切面代码记录本次调用信息,并将所述调用信息作为历史记录进行保存。
14.如权利要求13所述的装置,其特征在于,所述装置还包括选择模块、获取模块和拦截模块;
所述选择模块用于从保存的历史记录中选择第一历史记录,并确定重执行所述第一历史记录对应的拦截任务;
所述获取模块用于对所述第一历史记录进行反序列化,获得所述第一历史记录对应的目标对象以及入参;
所述拦截模块用于根据一种编程语言Java反射机制,对所述目标对象执行的第一目标方法进行拦截,并向所述第一目标方法传入所述入参。
15.一种针对目标方法的监控装置,其特征在于,包括连接到同一总线的存储器和处理器;
所述存储器,用于存储指令;
所述处理器,用于执行所述指令,在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。
16.如权利要求15所述的装置,其特征在于,所述处理器用于启动代理进程,具体为:通过虚拟机VirtualMachine类的附加attach方法启动所述代理进程。
17.如权利要求15或16所述的装置,其特征在于,所述处理器还用于:
执行所述指令,在通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码之前,通过所述代理进程,根据执行所述代理进程的入口方法的仪器Instrumentation对象,获取所述调用进程中所有已加载的类的信息;
通过所述代理进程,根据所述调用进程的监控对象,从获取的所有已加载的类的信息中确定所述目标类,进而确定所述目标方法。
18.如权利要求15或16所述的装置,其特征在于,所述处理器用于通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码,具体为:
通过所述代理进程,使用开源包Javassist在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的第二代码;
通过所述代理进程对所述第二代码进行编译,得到所述第二类字节码。
19.如权利要求18所述的装置,其特征在于,所述处理器用于通过所述代理进程将所述第二类字节码写入所述调用进程,具体为:
通过所述代理进程中的仪器Instrumentation对象的一种方法RefineClass方法,将所述第二类字节码写入所述调用进程。
20.一种热切入装置,其特征在于,包括连接到同一总线的存储器和处理器;
所述存储器,用于存储指令;
所述处理器,用于执行所述指令,在通过调用进程对目标方法进行拦截时,执行所述目标方法对应的第二类字节码;其中,所述第二类字节码为对所述目标方法对应的第二代码进行编译得到的,所述第二代码为在所述目标方法原对应的第一代码中插入切面代码后得到的;在执行所述第二类字节码的过程中,通过所述切面代码记录本次调用信息,并将所述调用信息作为历史记录进行保存。
21.如权利要求20所述的装置,其特征在于,所述处理器还用于:
执行所述指令,在将所述调用信息作为历史记录进行保存之后,从保存的历史记录中选择第一历史记录,并确定重执行所述第一历史记录对应的拦截任务;
对所述第一历史记录进行反序列化,获得所述第一历史记录对应的目标对象以及入参;
根据一种编程语言Java反射机制,对所述目标对象执行的第一目标方法进行拦截,并向所述第一目标方法传入所述入参。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410643169.9A CN104391787B (zh) | 2014-11-13 | 2014-11-13 | 一种针对目标方法的监控、热切入方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410643169.9A CN104391787B (zh) | 2014-11-13 | 2014-11-13 | 一种针对目标方法的监控、热切入方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104391787A CN104391787A (zh) | 2015-03-04 |
CN104391787B true CN104391787B (zh) | 2017-04-26 |
Family
ID=52609695
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410643169.9A Active CN104391787B (zh) | 2014-11-13 | 2014-11-13 | 一种针对目标方法的监控、热切入方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104391787B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106295336B (zh) * | 2015-06-26 | 2020-05-22 | 阿里巴巴集团控股有限公司 | 恶意程序检测方法及装置 |
CN105653458B (zh) * | 2016-01-06 | 2018-12-18 | 北京京东尚科信息技术有限公司 | 检测目标Java项目中的高耗时Java方法的方法和装置 |
CN106844153B (zh) * | 2017-01-20 | 2020-02-11 | 北京奇虎科技有限公司 | 应用程序运行监控方法、装置以及终端 |
CN108572910A (zh) * | 2017-03-14 | 2018-09-25 | 百度在线网络技术(北京)有限公司 | 用于客户端的实验方法和装置 |
CN108880908A (zh) * | 2018-07-09 | 2018-11-23 | 上海盛付通电子支付服务有限公司 | 一种监控方法及其服务器 |
CN110806968B (zh) * | 2018-08-06 | 2024-04-09 | 阿里巴巴集团控股有限公司 | 应用程序运行信息获取方法及装置 |
CN109460243A (zh) * | 2018-10-17 | 2019-03-12 | 福建南威软件有限公司 | 一种基于Agentmain的生产环境在线类替换方法 |
CN110727480B (zh) * | 2019-09-05 | 2023-04-07 | 北京字节跳动网络技术有限公司 | 获取调用栈栈帧指令偏移的方法、装置、介质和设备 |
CN111367768A (zh) * | 2020-03-30 | 2020-07-03 | 中国建设银行股份有限公司 | 程序的函数响应时间监控方法及装置 |
CN111782534A (zh) * | 2020-07-03 | 2020-10-16 | 普信恒业科技发展(北京)有限公司 | 一种业务流程的监控方法、装置及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101140541A (zh) * | 2007-09-29 | 2008-03-12 | 中兴通讯股份有限公司 | 一种分布式软件系统的集成测试系统及方法 |
CN101895784A (zh) * | 2010-06-30 | 2010-11-24 | 中山大学 | 一种数字电视集成测试验证平台 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
IL159695A0 (en) * | 2001-07-06 | 2004-06-20 | Computer Ass Think Inc | System and method for managing object based clusters |
-
2014
- 2014-11-13 CN CN201410643169.9A patent/CN104391787B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101140541A (zh) * | 2007-09-29 | 2008-03-12 | 中兴通讯股份有限公司 | 一种分布式软件系统的集成测试系统及方法 |
CN101895784A (zh) * | 2010-06-30 | 2010-11-24 | 中山大学 | 一种数字电视集成测试验证平台 |
Also Published As
Publication number | Publication date |
---|---|
CN104391787A (zh) | 2015-03-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104391787B (zh) | 一种针对目标方法的监控、热切入方法及装置 | |
CN102750317B (zh) | 数据持久化处理方法、装置及数据库系统 | |
US20100115496A1 (en) | Filter generation for load testing managed environments | |
CN103605606B (zh) | 一种可自动转换的嵌入式软件测试用例批量执行方法 | |
CN104731896A (zh) | 一种数据处理方法及系统 | |
CN101960442B (zh) | 使用虚拟技术输入/输出数据的方法和设备 | |
Macko et al. | Performance introspection of graph databases | |
CN108595187A (zh) | 安卓安装包集成软件开发工具包的法、装置及存储介质 | |
CN108959055A (zh) | xfs文件系统的读写性能测试方法、装置及设备 | |
EP3391224A1 (en) | Method and apparatus for data mining from core traces | |
CN109542719A (zh) | 线程状态监控方法、装置、计算机设备和存储介质 | |
CN111538659B (zh) | 业务场景的接口测试方法、系统、电子设备和存储介质 | |
CN109542444A (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
CN103309696B (zh) | 一种Java卡扩展库更新方法、装置和Java卡 | |
US20080127111A1 (en) | Selective logging of computer activity | |
CN111026656A (zh) | 分布式存储的自动化测试系统、方法、设备及存储介质 | |
CN116009889A (zh) | 深度学习模型的部署方法、装置、电子设备及存储介质 | |
CN102682038A (zh) | 一种数据库变更方法以及装置 | |
CN110968500A (zh) | 一种测试用例的执行方法及装置 | |
CN105843661B (zh) | 一种面向主机系统的代码重定位方法及其系统 | |
CN106708721B (zh) | 代码覆盖测试的实现方法和装置 | |
CN114416530A (zh) | 字节码修改方法、装置、计算机设备和存储介质 | |
CN114840418A (zh) | 模糊测试方法及装置 | |
CN110046141B (zh) | 一种基于数据回放的数据存储方法及系统 | |
CN109840213A (zh) | 一种gui测试的测试数据创建方法、装置、终端及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200205 Address after: 518129 Bantian HUAWEI headquarters office building, Longgang District, Guangdong, Shenzhen Patentee after: HUAWEI TECHNOLOGIES Co.,Ltd. Address before: 210012 HUAWEI Nanjing base, 101 software Avenue, Yuhuatai District, Jiangsu, Nanjing Patentee before: Huawei Technologies Co.,Ltd. |
|
TR01 | Transfer of patent right |