`
sswh
  • 浏览: 161638 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

BTrace二三事之三:方法签名和参数匹配

    博客分类:
  • java
阅读更多
@OnMethod注解用来匹配拦截的方法,Location用来指定在方法的某个位置或者某个动作时触发拦截代码。

常用的Location:

Kind.ENTRY(缺省的Location,当进入方法时,代码添加在方法第一行)
Kind.RETURN(当从方法返回时,如果方法有多个返回点,则每一个返回点前都会执行)
Kind.ERROR(当方法执行异常时,当方法执行过程中抛出异常,会触发)
  实际生成的代码形如:try{...}catch(Throwable e){...}

方法匹配的原则:(方法名和type与被拦截方法的方法签名一致,如果type缺省,则匹配全部同名方法;当然,还必须符合方法参数的要求)
@OnMethod(clazz = "/my\\..*?Command/", method = "execute", type = "void(my.FooParam)")

方法参数要求:
除了注解参数以外,普通方法参数可以为空;但如果提供参数,就必须符合下面的要求:
Kind.ENTRY 方法参数必须和被拦截方法签名参数一致(参数个数和类型都一致)
Kind.RETURN方法参数必须和被拦截方法签名参数一致(参数个数和类型都一致)
Kind.ERROR 参数类型必须是Throwable(和被拦截方法签名无关)
其中,可以使用AnyType来匹配任何对象、或者数组参数

@BTrace(unsafe = true)
public class SampleScript {

@TLS // 在转换后的Script脚本类中,@TLS变量会自动声明为ThreadLocal变量
static Object fooParam;

@OnMethod(clazz = "/my\\..*?Command/", method = "execute", type = "void(my.FooParam)")
public static void onExecute(@ProbeClassName String className, AnyType fooParam) {
	SampleScript.fooParam = fooParam;
}

@OnMethod(clazz = "/my\\..*?Command/", method = "execute", location = @Location(Kind.RETURN), type = "void(my.FooParam)")
public static void onExecuteReturn(@ProbeClassName String className) {
	BTraceUtils.println(Strings.concat("execute return : className = ", className));
	BTraceUtils.println(Strings.concat("param : fooParam = ", Strings.str(fooParam)));
}

@OnMethod(clazz = "/my\\..*?Command/", method = "execute", location = @Location(Kind.ERROR), type = "void(my.FooParam)")
public static void onExecuteError(@ProbeClassName String className, Throwable e) {
	BTraceUtils.println(Strings.concat("execute error : className = ", className));
	BTraceUtils.println(Strings.concat("param : fooParam = ", Strings.str(fooParam)));
	BTraceUtils.println(Strings.concat("throw : message = ", e.getMessage()));
}
}
0
0
分享到:
评论

相关推荐

    BTrace二三事之二:OnMethod子类匹配BUG(怀疑)

    NULL 博文链接:https://sswh.iteye.com/blog/1820391

    btrace扩展功能工具

    1.btrace扩展是在btrace已由功能上进行的扩展,原有功能和使用方式依然没变。目前版本扩展了两个功能:接口时间监控和接口时间调用树监控。扩展之后的btrace功能使用时都不需要写btrace脚本。 2.使用接口时间监控...

    btrace release-1.2.5.1

    btrace btrace btrace btrace

    BTrace测试

    BTrace测试,参考:http://learnworld.iteye.com/blog/1402763

    Btrace 官方zip包

    Btrace用来做项目检测,访问过的类方法统计,无侵略性,JDK1.6

    btrace工具

    Btrace:java性能调优及问题追踪工具 Btrace:java性能调优及问题追踪工具

    btrace api 1.2.chm

    btrace api 1.2 文档,从网上扒下来自己做的,其他地方貌似都没有...btrace是一个跟踪、监控java程序的小工具,能够在不改变源代码的情况下监控很多东西,比如:方法运行时间、输入输出参数、抛出的异常、调用的次数等

    btrace1.3.9.zip

    btrace1.3.9 jdk1.8 maven 编译构建 http://github.com/btraceio/btrace

    btrace1.3.9

    btrace1.3.9最新版本转过来

    BTrace安装包 btrace-bin-1.3.11.3.zip + btrace-src-1.3.11.3.zip

    linux和windows通用,1.3.11版本。btrace-bin直接解压缩配置环境变量后即可运行使用。 java监控调试工具虚拟机监控程序,利用BTrace可以在线监控java程序状态。 BTrace是一种安全,动态的Java跟踪工具。BTrace通过...

    btrace安装包

    btrace安装包,linux和windows通用,1.3.9版本。可以直接解压缩配置环境变量后运行使用

    jdk1.8-Btrace.rar

    java 在线检测插件Btrace, 无需重启服务,即可在线定位问题

    BTrace自我总结测试代码

    BTrace自我学习测试代码总结,包含List对象参数,自定义对象的参数的监控。

    BTrace监控远程服务器使用实例

    自己做的BTrace监控,Linux服务器上的tomcat工程,压缩包包含BTrace开发所需的jar包 BTrace简单示例代码 jvisualvm.exe如果远程服务器监控JVM虚拟机信息

    btrace调试工具

    BTrace通过动态(字节码)检测类运行Java程序。BTrace插入跟踪行动运行Java程序的类和hotswaps跟踪程序类。 因此,也就成为我们线上跟踪生产代码的有力工具!

    btrace workbench

    btrace workbench 插件jar包打包下载,jvisualvm的插件

    btrace-release-1.3.11.3.zip

    Btrace Java 发布版本,Java 虚拟机监控程序

    BTrace实现原理

    BTrace整个实现的原理是Java Agent+ASM+Java instrument+ Java Complier Api

Global site tag (gtag.js) - Google Analytics