- 第一步: 下载 地址
下载后解压缩,到D盘 D:\btrace目录下
- 第二步: path里面配置btrace
将D:\btrace\bin加到环境变量的path中
如果没有java_home还要配置JAVA_HOME
- 第三步: 测试代码示例
a) 需要trace的java程序代码
package com.ddc.mem; public class CaseObject{ private static int sleepTotalTime=0; public boolean execute(int sleepTime) throws Exception{ System.out.println("sleep: "+sleepTime); sleepTotalTime+=sleepTime; Thread.sleep(sleepTime); if(sleepTime%2==0) return true; else return false; } }
b) 运行上述代码的main入口函数
package com.ddc.mem; import java.util.Random; public class CaseObjectMain { public static void main(String[] args) throws Exception{ Random random=new Random(); CaseObject object=new CaseObject(); while(true){ boolean result=object.execute(random.nextInt(1000)); Thread.sleep(1000); } } }
c)btrace java脚本代码
/* BTrace Script Template */ import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; @BTrace public class TracingScript { /* put your code here */ /*指明要查看的方法,类*/ @OnMethod( clazz="com.ddc.mem.CaseObject", method="execute", location=@Location(Kind.RETURN) ) /*主要两个参数是对象自己的引用 和 返回值,其它参数都是方法调用时传入的参数*/ public static void traceExecute(@Self com.ddc.mem.CaseObject object,int sleepTime, @Return boolean result){ println("调用堆栈!!"); println(strcat("返回结果是:",str(result))); jstack(); println(strcat("时间是:",str(sleepTime))); } }
- 第四步: 编译运行需要trace的java代码
javac -d D:\ CaseObject.java
javac -d D:\ CaseObjectMain.java
java com.ddc.mem.CaseObjectMain
- 第五步: 跟踪CaseObject方法的执行情况
jps 得到java运行的pid
btrace -cp btrace/build;D:/ pid TracingScript.java
CaseObject的class文件是放在D:\目录下的,所以加了D:\