btrace 注解

概述

在官网的手册中,已经将各类注解做了说明,在本篇中做详细介绍,并结合实际使用做一些demo

onMethod

OnMethod指定一个BTrace监听点,指定一个java类、一个方法和其中一个特定的位置。当将跟踪程序匹配到指定的位置时,会调用一个BTrace跟踪操作方法。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface OnMethod {
    String clazz();
    String method() default "";
    String type() default "";
    Location location() default @Location();
    Level enableAt() default @Level;
}
  • clazz:指定监听(或跟踪)类名。要么是类的完全限定名,要么是像[/java\.awt\..+/]这样或@annotation_of_the_class。即指定一个类作为一个被指定注解注解的类。
  • method:指定监听(或跟踪)方法名。要么是方法的名称,要么是像[/read.+/]这样或@annotation_of_the_method。即指定方法间接地指定为由指定的注释标注的方法。
  • type:这是方法类型声明。这类似于Java方法声明,但不包括方法名、参数名和抛出子句。public void myMethod(java.lang.String param)将转变成void (java.lang.String)
  • location:确定在方法集合中监听到的精确的”位置”或”点”。
  • level:可以根据当前的设置级别定义启用/禁用处理程序,一般不设置使用默认值即可

onError

当BTrace action方法抛出任何异常时,都将调用该注释注释的BTrace方法。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface OnError {
}

onEvent

当BTrace客户端发送”事件”命令时,将调用该注释注释的BTrace方法。客户端可以根据某种形式的用户请求发送一个事件(如按ctrl-c或GUI菜单)。字符串值可以用作事件的名称

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface OnEvent {
    String value() default ""; //事件名称
}

onExit

当Btrace action方法调用内建函数exit(int)时,将调用该注解注释的BTrace方法
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface OnExit {
}

onLowMemery

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface OnLowMemory {
    String pool();
    long threshold();
}

pool:The memory pool name
threshold:The threashold size to watch for

onProbe

该注释用于以一种抽象的方式指定BTrace监听点,而不是指定类和方法名。这个抽象名称空间和(本地)名称在运行时被BTrace代理映射到一个或多个具体的监听点

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface OnProbe {
    String namespace();
    String name();
}
  • namespace:这个抽象的名称空间监听点。名称空间遵循java包名约定。
  • name:名字在名称空间中。在名称空间中惟一地标识一个监听

onTimer

当计时器到达指定的周期值时,将调用该注释注释的BTrace方法。这可以用来运行周期性的跟踪操作。

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface OnTimer {
    long value();
}
  • time:计时器的周期设置,以milliseconds为单位

Location

拦截时机,定义Btrace对方法的拦截位置,通过@Location注解指定,默认为Kind.ENTRY。可以为同一个函数的不同的Location,分别定义多个拦截函数

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Location {
    Kind value() default Kind.ENTRY;
    Where where() default Where.BEFORE;
    String clazz() default "";
    String method() default "";
    String field() default "";
    String type() default "";
    int line() default 0;
}

Kind

这个enum在Location注释中指定,以指定监听点类型。这个枚举在Java方法的字节码中标识了各种各样的”点”。

public enum Kind {
    ARRAY_GET,
    ARRAY_SET,
    CALL,
    CATCH,
    CHECKCAST,
    ENTRY,
    ERROR,
    FIELD_GET,
    FIELD_SET,
    INSTANCEOF,
    LINE,
    NEW,
    NEWARRAY,
    RETURN,
    SYNC_ENTRY,
    SYNC_EXIT,
    THROW
};
  • ARRAY_GET:array元素加载。支持的注解有ProbeClassName、ProbeMethodName、Self、Return
  • ARRAY_SET:array元素存储。支持的注解有ProbeClassName、ProbeMethodName、Self方法中调用其它方法的执行情况。支持的注解有ProbeClassName、ProbeMethodName、Self、TargetInstance、TargetMethodOrField、Return、Duration
  • CALL:
    CATCH:异常被捕获(Catch)。支持的注解有ProbeClassName、ProbeMethodName、- Self
  • CHECKCAST:。支持的注解有ProbeClassName、ProbeMethodName、Self、TargetInstance
  • ENTRY:在进入方法时,调用Btrace脚本。支持的注解有ProbeClassName、ProbeMethodName、Self、Duration
  • ERROR:异常没被捕获被抛出函数之外(Error)。支持的注解有ProbeClassName、ProbeMethodName、Self、TargetInstance、TargetMethodOrField、Return
  • FIELD_GET:获取字段值。支持的注解有ProbeClassName、ProbeMethodName、Self、TargetInstance、TargetMethodOrField、Return
  • FIELD_SET:设置字段值。支持的注解有ProbeClassName、ProbeMethodName、Self、TargetInstance、TargetMethodOrField
  • INSTANCEOF:设置字段值。支持的注解有ProbeClassName、ProbeMethodName、Self、TargetInstance
  • LINE:通过设置line,可以监控代码是否执行到指定的位置。支持的注解有ProbeClassName、ProbeMethodName、Self
  • NEW:新对象创建。支持的注解有ProbeClassName、ProbeMethodName、Self、Return
  • NEWARRAY:新array对象创建。支持的注解有ProbeClassName、ProbeMethodName、Self、Return
  • RETURN:方法执行完时,调用Btrace脚本,只有把拦截位置定义为Kind.RETURN,才能获取方法的返回结果@Return和执行时间@Duration。支持的注解有ProbeClassName、ProbeMethodName、Self、Return、Duration
  • SYNC_ENTRY:进入同步代码块。支持的注解有ProbeClassName、ProbeMethodName、Self
  • SYNC_EXIT:退出同步代码块。支持的注解有ProbeClassName、ProbeMethodName、Self
  • THROW:异常抛出(Throw)。支持的注解有ProbeClassName、ProbeMethodName、Self

where

这个枚举是在Location注释中指定的,以指定监听点是在特定的点之后还是在特定的点之前

public enum Where {
    AFTER,
    BEFORE      
}

ProbeClassName

它用于将监听方法参数标记为监听目标类名的接收者,仅适用于OnMethod注释

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface ProbeClassName {
}

ProbeMethodName

它用于将监听方法参数标记为监听目标类名的接收者,仅适用于OnMethod注释

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface ProbeMethodName {
    boolean fqn() default false;
}

标记是否使用一个完全限定的名称(FQN)或一个简单的方法名,默认是false

Return

将方法参数标记为包含返回值的参数

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Return {
}

Self

将方法参数标记为包含 this实例 的参数

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.PARAMETER)
public @interface Self {
}

TargetInstance

标记一个监听方法参数,当Location是Kind#CALL、Kind#FIELD_GET或Kind#FIELD_SET的其中之一时,该参数是被调用的实例的接收者

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface TargetInstance {

}

TargetMethodOrField

标记一个监听方法参数,当Location是Kind.call时,该参数是调用方法名的接收者

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface TargetMethodOrField {
    boolean fqn() default false;
}

btrace用户手册1.3.9
btrace注解
btrace示例

原文连接 http://blog.csdn.net/yue530tomtom/article/details/78711081

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值