以下的内容,我是在jdk8上进行的(注意:jdk版本不能太低),是windows版的界面化。linux版的参考:https://blog.csdn.net/wwd0501/article/details/94485618
一、BTrace的安装
运行jvisualvm.exe
运行后是这个页面,点击工具-》插件
点击插件后出现这个页面,点击“可用插件”,勾选要安装的插件,点击安装即可,由于我已安装
BTrace工具,这儿未显示出来
安装后,点击“已安装”可看见安装过的插件
到这说明安装成功!
二、BTrace使用
下面是测试类,我是在eclipse中测试运行的
package com.test;
public class Calculator {
private int c = 1;
public int add(int a, int b) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
c++;
return a + b;
}
}
package com.test;
import java.util.Random;
public class BTraceDemo {
public static void main(String[] args) {
Calculator calculator = new Calculator();
Random random = new Random();
while (true) {
System.out.println(calculator.add(random.nextInt(10), random.nextInt(10)));
}
}
}
切记先运行BTraceDemo程序,然后打开jvisualvm.exe,会看见运行那个程序的进程,右击那个进程点击“Trace Application... ”就会出现以下面板
右击出现如下弹框,然后点击Trace application
在右边面板中放入
@OnMethod(
clazz = "com.test.Calculator",
method = "add",
location = @Location(Kind.RETURN)
)
public static void func(int a,int b,@Return int result,@Duration long time){
println("调用堆栈:");
jstack();
println(strcat("方法参数A:",str(a)));
println(strcat("方法参数B:",str(b)));
println("cost time : " + time);
println(strcat("方法结果:",str(result)));
println();
}
注意:clazz的指定
在@OnMethod注解中,需要指定class、method以及location等,class表明需要监控的类,method表明需要监控的方法,指定方式如下:
1、使用全限定名:clazz="com.test.Calculator", method="add"
2、使用正则表达式:clazz="/javax\\.swing\\..*/", method="/.*/"
3、使用接口:clazz="+com.ctrip.demo.Filter", method="doFilter"
4、使用注解:clazz="@javax.jws.WebService", method=""@javax.jws.WebMethod"
5、如果需要分析构造方法,需要指定method="<init>"
然后点击“start”,
然后就能在BTrace中看到运行结果了文章参考https://my.oschina.net/ferchen/blog/1610026