您的位置:首页 > 其它

btrace实验

2015-06-15 21:28 246 查看
1、在visulVM中安装BTrace.

2、编写测试程序

package www.klshiguang.btrace;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

public class BTraceTest {

public int add(int a,int b){

return a + b;

}

public static void main(String[] args) throws IOException {

BTraceTest test = new BTraceTest();

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

for(int i = 0;i < 10;i++){

reader.readLine();

int a = (int) Math.round(Math.random() * 1000);

int b = (int) Math.round(Math.random() * 1000);

System.out.println(test.add(a, b));

}

}

}

运行程序,等待控制台输入。

3、在visulVM中邮件点击上面的程序名,选择trace application...

4、在BTrace面板输入以下内容:

import com.sun.btrace.annotations.*;

import static com.sun.btrace.BTraceUtils.*;

@BTrace

public class TracingScript {

@OnMethod(

clazz="www.klshiguang.btrace.BTraceTest",

method="add",

location=@Location(Kind.RETURN)

)

public static void func(@Self
www.klshiguang.btrace.BTraceTest instance,int a,

int b,@Return int result){

println("调用堆栈:");

jstack();

println(strcat("方法参数a:",str(a)));

println(strcat("方法参数a:",str(b)));

println(strcat("方法结果:",str(result)));

}

}

5、点击start开始编译

当出现下面内容表示编译成功:

* Starting BTrace task

** Compiling the BTrace script ...

*** Compiled

** Instrumenting 1 classes ...

*** Done

** BTrace up&running

*** Done

** BTrace up&running

6、在BTraceTest程序上回车

7、观察btrace,有下列信息输出,说明动态插入代码成功:

调用堆栈:

www.klshiguang.btrace.BTraceTest.add(BTraceTest.java:10)

www.klshiguang.btrace.BTraceTest.main(BTraceTest.java:21)

方法参数a:324

方法参数a:159

方法结果:483

调用堆栈:

www.klshiguang.btrace.BTraceTest.add(BTraceTest.java:10)

www.klshiguang.btrace.BTraceTest.main(BTraceTest.java:21)

方法参数a:843

方法参数a:411

方法结果:1254

调用堆栈:

www.klshiguang.btrace.BTraceTest.add(BTraceTest.java:10)

www.klshiguang.btrace.BTraceTest.main(BTraceTest.java:21)

方法参数a:227

方法参数a:738

方法结果:965

调用堆栈:

www.klshiguang.btrace.BTraceTest.add(BTraceTest.java:10)

www.klshiguang.btrace.BTraceTest.main(BTraceTest.java:21)

方法参数a:940

方法参数a:656

方法结果:1596

调用堆栈:

www.klshiguang.btrace.BTraceTest.add(BTraceTest.java:10)

www.klshiguang.btrace.BTraceTest.main(BTraceTest.java:21)

方法参数a:416

方法参数a:433

方法结果:849

调用堆栈:

www.klshiguang.btrace.BTraceTest.add(BTraceTest.java:10)

www.klshiguang.btrace.BTraceTest.main(BTraceTest.java:21)

方法参数a:675

方法参数a:873

方法结果:1548

调用堆栈:

www.klshiguang.btrace.BTraceTest.add(BTraceTest.java:10)

www.klshiguang.btrace.BTraceTest.main(BTraceTest.java:21)

方法参数a:861

方法参数a:56

方法结果:917

调用堆栈:

www.klshiguang.btrace.BTraceTest.add(BTraceTest.java:10)

www.klshiguang.btrace.BTraceTest.main(BTraceTest.java:21)

方法参数a:865

方法参数a:527

方法结果:1392

调用堆栈:

www.klshiguang.btrace.BTraceTest.add(BTraceTest.java:10)

www.klshiguang.btrace.BTraceTest.main(BTraceTest.java:21)

方法参数a:581

方法参数a:682

方法结果:1263

调用堆栈:

** BTrace has stopped

** BTrace has stopped
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: