一种针对目标方法的监控、热切入方法及装置制造方法及图纸

技术编号:11116617 阅读:143 留言:0更新日期:2015-03-06 13:48
一种针对目标方法的监控、热切入方法及装置。本发明专利技术公开了一种针对目标方法的监控方法,用于解决集成测试的效率较低、测试时间过长的技术问题。所述方法包括:在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。本发明专利技术还公开了一种热切入方法,及相应的装置。

【技术实现步骤摘要】

本专利技术涉及计算机
,特别涉及一种针对目标对象的监控、热切入方法及装置。
技术介绍
在基于Web(网页)应用的项目开发过程中,各个模块之间的集成测试通常效率都很低。开发人员要测试自己所属模块的代码时,通常都要从前台界面发起端到端的业务,才能触发到自己的代码。而在集成测试过程中,各个模块都可能导致端到端的业务无法正常完成,这样导致开发人员总是要等待其他模块的修复,在业务通畅后才能测试到自己的代码。而且端到端业务的流程复杂,耗时很长,在集成测试环境上调测自己的代码十分困难。例如,要开发一个购票软件,整个流程可能包括了选票、订票、付款等过程。那么,如果需要对付款模块对应的代码进行测试,就必须等到选票、订票等过程均完成后才能测试,在这个过程中,如果前面的选票、订票等任意一个过程中间出现故障,流程无法正常进行,那也就无法对付款模块对应的代码进行测试,只有等前面故障都排除之后才能再进行测试。可见,现在的测试方式效率低下,而且耗时过长。
技术实现思路
本专利技术实施例提供一种针对目标对象的监控、热切入方法及装置,用于解决集成测试的效率较低、测试时间过长的技术问题。本专利技术的第一方面,提供一种针对目标方法的监控方法,包括:在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。结合第一方面,在第一方面的第一种可能的实现方式中,启动代理进程,包括:通过虚拟机VirtualMachine类的附加attach方法启动所述代理进程。结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,在通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码之前,还包括:通过所述代理进程,根据执行所述代理进程的入口方法的仪器Instrumentation对象,获取所述调用进程中所有已加载的类的信息;通过所述代理进程,根据所述调用进程的监控对象,从获取的所有已加载的类的信息中确定所述目标类,进而确定所述目标方法。结合第一方面或第一方面的第一种可能的实现方式或第二种可能的实现方式,在第一方面的第三种可能的实现方式中,通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码,包括:通过所述代理进程,使用开源包Javassist在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的第二代码;通过所述代理进程对所述第二代码进行编译,得到所述第二类字节码。结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,通过所述代理进程将所述第二类字节码写入所述调用进程,包括:通过所述代理进程中的Instrumentation对象的一种方法RefineClass方法,将所述第二类字节码写入所述调用进程。本专利技术的第二方面,提供一种热切入方法,包括:在通过调用进程对目标方法进行拦截时,执行所述目标方法对应的第二类字节码;其中,所述第二类字节码为对所述目标方法对应的第二代码进行编译得到的,所述第二代码为在所述目标方法原对应的第一代码中插入切面代码后得到的;在执行所述第二类字节码的过程中,通过所述切面代码记录本次调用信息,并将所述调用信息作为历史记录进行保存。结合第二方面,在第二方面的第一种可能的实现方式中,在将所述调用信息作为历史记录进行保存之后,还包括:从保存的历史记录中选择第一历史记录,并确定重执行所述第一历史记录对应的拦截任务;对所述第一历史记录进行反序列化,获得所述第一历史记录对应的目标对象以及入参;根据一种编程语言Java反射机制,对所述目标对象执行的第一目标方法进行拦截,并向所述第一目标方法传入所述入参。本专利技术的第三方面,提供一种针对目标方法的监控装置,包括:启动模块,用于在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;插入模块,用于通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;替换模块,用于通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。结合第三方面,在第三方面的第一种可能的实现方式中,所述启动模块用于启动代理进程,具体为:通过虚拟机VirtualMachine类的附加attach方法启动所述代理进程。结合第三方面或第三方面的第一种可能的实现方式,在第三方面的第二种可能的实现方式中,所述装置还包括获取模块和确定模块;所述获取模块用于:在所述插入模块通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码之前,通过所述代理进程,根据执行所述代理进程的入口方法的仪器Instrumentation对象,获取所述调用进程中所有已加载的类的信息;所述确定模块用于:通过所述代理进程,根据所述调用进程的监控对象,从获取的所有已加载的类的信息中确定所述目标类,进而确定所述目标方法。结合第三方面或第三方面的第一种可能的实现方式或第二种可能的实现方式,在第三方面的第三种可能的实现方式中,所述插入模块具体用于:通过所述代理进程,使用开源包Javassist在所述目标方法所对应的所述第一代码中插入所述切面代码,得到所述目标方法对应的第二代码;通过所述代理进程对所述第二代码进行编译,得到所述第二类字节码。结合第三方面的第三种可能的实现方式,在第三方面的第四种可能的实现方式中,所述替换模块用于通过所述代理进程将所述第二类字节码写入所述调用进程,具体为:通过所述代理进程中的Instrumentation对象的一种方法RefineClass方法,将所述第二类字节码写入所述调用进程。本专利技术的第四方面,提供一种热切入装置,包括:执行模块,用于在通过调用进程对目标方法进行本文档来自技高网...
一种<a href="http://www.xjishu.com/zhuanli/55/201410643169.html" title="一种针对目标方法的监控、热切入方法及装置原文来自X技术">针对目标方法的监控、热切入方法及装置</a>

【技术保护点】
一种针对目标方法的监控方法,其特征在于,包括:在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对应于第一类字节码;通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编译后得到的结果;通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二类字节码替换所述第一类字节码。

【技术特征摘要】
1.一种针对目标方法的监控方法,其特征在于,包括:
在通过调用进程监控目标类对应的目标方法时,启动代理进程,并将所述
代理进程附加在所述调用进程上;其中,在所述调用进程中,所述目标方法对
应于第一类字节码;
通过所述代理进程在所述目标方法所对应的第一代码中插入切面代码,得
到所述目标方法对应的第二类字节码;所述第一类字节码为将所述第一代码编
译后得到的结果;
通过所述代理进程将所述第二类字节码写入所述调用进程,并以所述第二
类字节码替换所述第一类字节码。
2.如权利要求1所述的方法,其特征在于,启动代理进程,包括:通过
虚拟机VirtualMachine类的附加attach方法启动所述代理进程。
3.如权利要求1或2所述的方法,其特征在于,在通过所述代理进程在
所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第
二类字节码之前,还包括:
通过所述代理进程,根据执行所述代理进程的入口方法的仪器
Instrumentation对象,获取所述调用进程中所有已加载的类的信息;
通过所述代理进程,根据所述调用进程的监控对象,从获取的所有已加载
的类的信息中确定所述目标类,进而确定所述目标方法。
4.如权利要求1-3任一所述的方法,其特征在于,通过所述代理进程在
所述目标方法所对应的第一代码中插入切面代码,得到所述目标方法对应的第
二类字节码,包括:
通过所述代理进程,使用开源包Javassist在所述目标方法所对应的所述第
一代码中插入所述切面代码,得到所述目标方法对应的第二代码;
通过所述代理进程对所述第二代码进行编译,得到所述第二类字节码。
5.如权利要求4所述的方法,其特征在于,通过所述代理进程将所述第

\t二类字节码写入所述调用进程,包括:
通过所述代理进程中的Instrumentation对象的一种方法RefineClass方法,
将所述第二类字节码写入所述调用进程。
6.一种热切入方法,其特征在于,包括:
在通过调用进程对目标方法进行拦截时,执行所述目标方法对应的第二类
字节码;其中,所述第二类字节码为对所述目标方法对应的第二代码进行编译
得到的,所述第二代码为在所述目标方法原对应的第一代码中插入切面代码后
得到的;
在执行所述第二类字节码的过程中,通过所述切面代码记录本次调用信
息,并将所述调用信息作为历史记录进行保存。
7.如权利要求6所述的方法,其特征在于,在将所述调用信息作为历史
记录进行保存之后,还包括:
从保存的历史记录中选择第一历史记录,并确定重执行所述第一历史记录
对应的拦截任务;
对所述第一历史记录进行反序列化,获得所述第一历史记录对应的目标对
象以及入参;
根据一种编程语言Java反射机制,对所述目标对象执行的第一目标方法进
行拦截,并向所述第一目标方法传入所述入参。
8.一种针对目标方法的监控装置,其特征在于,包括:
启动模块,用于在通过调用进程监控目标类对应的目标方法时,启动代理
进程,并将所述代理进程附加在所述调用进程上;其中,在所述调用进程中,
所述目标方法对应于第一类字节码;
插入模块,用于通过所述代理进程在所述目标方法所对应的第一代码中插
入切面代码,得到所述目标方法对应的第二类字节码;所述第一类字节码为将
所述第一代码编译后得到的结果;
替换模块,用于通过所述代理进程将所述第二类字节码写入所述调用进

\t程,并以所述第二类字节码替换所述第一类字节码。
9.如权利要求8所述的装置,其特征在于,所述启动模块用于启动代理
进程,具体为:通过虚拟机VirtualMachine类的附加attach方法启动所述代理
进程。
10.如权利要求8或9所述的装置,其特征在于,所述装置还包括获取模
块和确定模块;
所述获取模块用于:在所述插入模块通过所述代理进程在所述目标方法所
对应的第一代码中插入切面代码,得到所述目标方法对应的第二类字节码之
前,通过所述代理进程,根据执行所述代理进程的入口方法的仪器
Instrumentation对象,获取所述调用进程中所有已加载的类的信息;
所述确定模块用于:通过所述代理进程,根据所述调用进程的监控对象,
从获取的所有已加载的类的信息中确定所述目标类,进而确定所述目标方法。
11.如权利要求8-10任一所述的装置,其特征在于,所述插入模块具体用
于:
通过所述代理进程,使用开源包Javassist在所述目标方法所对应的所述第
一代码中插入所述切面代码,得到所述目标方法对应的第二代码;
通过所述代理进程对所述第二代码进...

【专利技术属性】
技术研发人员:苏胄
申请(专利权)人:华为软件技术有限公司
类型:发明
国别省市:江苏;32

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

1