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

Btrace示例和资料整理

 

Btrace示例

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

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的代码如下:

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