首页 » 编程语言 » Java » Btrace示例和资料整理

Btrace示例和资料整理

 

Btrace示例

在这个示例中,我们将实现Btrace脚本跟踪一个成员变量的变化。
被跟踪类的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package com.bo56;
 
class Demo {
    private static int counter;
 
    public void add(){
        try {
            counter++;
            System.out.println("bo56.com " + counter);
            Thread.sleep(1000);
        } catch (Exception e) {
            System.out.println(e);
        }  
    }  
}
 
public class Test{
 
    public static void main(String[] arg) {
        Demo demo = new Demo();
        for (int i = 0; i < 100; i++) {
            demo.add();
        }  
    }  
}

我们要实现的跟踪目标是,每当demo.add调用完毕Return时,我们输出counter值。Btrace的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.sun.btrace.samples;
 
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
 
@BTrace
public class Canglong {
     
    @OnMethod(
        clazz="com.bo56.Demo",
        method="add",
        location=@Location(value=Kind.RETURN)
    )  
    public static void monitor(@Self Object self, @ProbeMethodName String pmn){
        Class clazz = Reflective.classOf(self);
        int counter = getInt(field(clazz, "counter"), self);
        println("counter value is " + counter);
    }
}

上面的Reflective.classOf , field 等方法都是在包com.sun.btrace.BTraceUtils中。具体可以查看作者github源码。路径是 /src/share/classes/com/sun/btrace/BTraceUtils.java。

相关代码

代码的github地址

https://github.com/btraceio/btrace

com.sun.btrace.BTraceUtils工具类提供的所有方法

/src/share/classes/com/sun/btrace/BTraceUtils.java

Btrace实现代码监控增强处理的核心逻辑

里面也包含Location中每种Kind都接受那些参数。如多对btrace中对OnMethod的Location使用上,以及一些annotation使用不明确的,可以查看此文件。
/src/share/classes/com/sun/btrace/runtime/Instrumentor.java

所有示例代码

/samples/
/src/test/

相关资料

技术交流

原文链接:Btrace示例和资料整理,转载请注明来源!

原文链接:Btrace示例和资料整理,转载请注明来源!

0