@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()));
}
}
分享到:
相关推荐
本文将深入探讨“BTrace二三事之二:OnMethod子类匹配BUG(怀疑)”这一主题,结合源码分析和实际工具应用,揭示可能存在的问题及其解决策略。 首先,我们要理解BTrace的工作原理。BTrace是基于字节码注入的技术,它...
### 二、Btrace 的主要功能 1. **类方法统计**:Btrace 可以帮助开发者追踪并统计应用程序中各个类方法的调用次数、执行时间等信息,这对于优化性能、定位热点代码至关重要。 2. **无侵略性监控**:由于Btrace 不...
标题中的 "btrace-release-1.3.11.3.zip" 表明这是一个 Btrace 的特定发布版本,版本号为 1.3.11.3,通常包含已编译的库文件、文档和其他必要的资源。 在 Java 开发中,性能监控是至关重要的,因为这有助于识别和...
【标题】"btrace release-1.2.5.1" 指的是...从提供的文件列表中,我们可以获取到版权信息、许可证、第三方库信息、安装指南、使用示例、详细文档以及可执行文件,这些都为用户深入理解和使用BTrace提供了全面的支持。
1. `btrace-bin-1.3.9.tgz`:这是一个使用TGZ(TAR GZipped)格式的压缩文件,通常包含编译好的二进制文件和其他非源码资源。用户可以解压后直接在支持Java的环境中运行,无需编译。 2. `btrace-1.3.9.zip`:这是另...
在Java开发领域,性能优化是不可或缺的一环,而BTrace作为一个强大的动态跟踪工具,可以帮助开发者实时监控和分析应用程序的行为。本文将详细介绍如何在jVisualVM上进行BTrace插件的离线安装,以便在无法在线安装的...
在Java开发过程中,性能瓶颈的查找和内存泄漏的检测往往是棘手的问题,而BTrace Workbench则能够帮助开发者实时查看方法调用、对象创建、线程活动等关键信息,从而有效地解决这些问题。 【文件名称列表】"8u40" ...
这个代理会拦截指定的类和方法,让你能够在运行时添加自定义的行为。 5. **btrace-boot.jar** Btrace启动JAR文件,用于帮助启动和配置Btrace服务器。它包含了运行Btrace服务端所需的基本环境和依赖。 **Btrace...
二、BTrace 1.3.9与JDK 1.8兼容性 BTrace 1.3.9版本针对JDK 1.8进行了深度适配,确保在Java 8环境下依然能稳定高效地工作。Java 8引入了许多新特性,如Lambda表达式和Stream API,BTrace 1.3.9能够很好地与这些新...
【标题】:“btrace支持jdk1.7 linux下使用” 【描述】:“btrace支持jdk1.7 linux下使用 非常好用哦 呵呵呵呵” 【知识点详解】 BTrace(全称:Bytecode Tracing for Java)是一款强大的动态追踪工具,专为Java...
【标题】"btrace_extend-master" 是一个与BTrace工具相关的扩展项目,它提供了一些额外的功能和增强,以便更好地监控和诊断Java应用程序。BTrace是一款强大的动态代码分析工具,允许开发者在运行时对Java应用程序...
1.btrace扩展是在btrace已由功能上进行的扩展,原有功能和使用方式依然没变。目前版本扩展了两个功能:接口时间监控和接口时间调用树监控。扩展之后的btrace功能使用时都不需要写btrace脚本。 2.使用接口时间监控...
在监控脚本中,`@OnMethod`注解指定了要监控的类和方法,`@Duration`注解用于获取方法的执行时间。当`requestDecode`方法的执行时间超过阈值时,`println`和`jstack`分别用于输出警告信息和当前线程的堆栈跟踪,这...
脚本可以使用内置的探查点(如`@OnMethod`)来指定在哪些类和方法上插入跟踪代码。一旦编写完成,可以通过`btrace`命令行工具执行脚本,附加到目标Java进程。 4. **常见应用场景** - **性能分析**:监测CPU占用率...
BTrace,一个强大的Java诊断工具,其主要功能是在线无侵入地对生产环境中的Java应用程序进行动态跟踪和性能分析。它的实现原理主要依赖于四个核心组件:Java Agent、ASM、Java Instrument API以及Java Compiler API...
BTrace是一款强大的Java应用程序动态跟踪工具,它允许开发者在不修改源代码或重新启动应用的情况下,对正在运行的Java应用程序进行实时的性能分析和诊断。这款工具的核心在于其字节码注入技术,它能够动态地在类的...
通常,这样的包会包含Btrace的二进制文件、文档、示例脚本以及可能的配置文件,方便用户在Java 1.8环境下安装和使用Btrace。用户需要先解压这个文件,然后根据文档指导进行配置和启动,以利用Btrace的功能。 在实际...
这些脚本被称为 BTrace 脚本,它们是基于 Java 的,但包含了一些特定的注解,如 `@OnMethod` 和 `@Traced`,用于指示在哪些方法执行前后插入跟踪代码。 **二、BTrace 的主要特性** 1. **安全**:BTrace 在运行时...