Download binaries here:
https://github.com/jbachorik/btrace/releases/tag/v1.3.3
Java class under test:
BTraceTest.java:
public class BTraceTest { public static void main(String[] args) throws Exception { for (int i = 0; i < 1000000; i++) { Thread.sleep(1000); doSomething(); } } public static void doSomething() { System.out.println("something"); } }
Btrace profiling class: Btrace1.java:
import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; import java.lang.reflect.Field; @BTrace public class Btrace1 { @OnMethod( clazz="BTraceTest", method="doSomething" ) public static void onDoSomething() { println("got it"); } }
compile it:
./btracec -classpath . ./Btrace1.java
run it:
./btrace -classpath . 24160 ./Btrace1.class
where 24160 is the PID of the BTraceTest java application
It works! It's great!
A slightly more advanced example using Class parameters:
public class BTraceTest { public static void main(String[] args) throws Exception { for (int i = 0; i < 1000000; i++) { Thread.sleep(1000); BTraceParam param = new BTraceParam(); param.name = "hello " + i; doSomething(param); } } public static void doSomething(BTraceParam param) { System.out.println("something" + param.name); } } public class BTraceParam { String name; } import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; import com.sun.btrace.AnyType; import java.lang.reflect.Field; @BTrace public class Btrace1 { @OnMethod( clazz="BTraceTest", method="doSomething" ) public static void anyDoSomething(@ProbeClassName String pcn, @ProbeMethodName String pmn, AnyType[] args) { println(pcn); println(pmn); printArray(args); } }
this way you can print the value also of any parameter !
To print the stacktrace (very useful!) use jstack();
No comments:
Post a Comment