VisualVM-BTrace

Posted 下士闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VisualVM-BTrace相关的知识,希望对你有一定的参考价值。

VisualVM是一个非常神奇的性能检测工具;从官网下载完毕之后,先不要急着使用,因为VisualVM是需要插件才能够使用的,Tools->Plugins可以选定插件进行在线安装,但是有的时候因为网络原因,下载过程发生异常(笔者就遇到这种情况),可以从下面的网址来获取离线安装包(需要逐个点一下,或者采用迅雷的全部下载链接?);可以在Plugins界面的“downloads”标签页中通过“add Plugins...”按钮来导入安装包进行安装。

http://services.netbeans.org/uc/show_uc_content.php?ucurl=http://bits.netbeans.org/VisualVM/uc/8u40/updates.xml

 

这里介绍一下Visual里面的神奇功能:BTrace,可以通过BTrace来跟踪一下执行jar包的变量,输入变量值,这个在无法调试的环境下(比如生产环境)超级有用。

package com.learnworld;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class BTraceTest {
	public int add(int a, int b){
		return a + b;
	}
	
	public static void main(String[] args) throws Exception{
		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));
		}
	}
}

 打成jar包后,通过命令行java -jar BTraceTest.jar

然后使用VVM打开,就可以看到VVM已经探测到了这个jar包,然后在vvm左侧Applications栏,右键这个应用,选择“Trace Application...”

/* BTrace Script Template */
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;

@BTrace
public class TracingScript {         
	@OnMethod(clazz="com.learnworld.BTraceTest",method="add",location=@Location(Kind.RETURN))
    public static void func(int a, int b, @Return int result){
        println("调用堆栈:");

	    jstack();
	    println(strcat("方法参数A:", str(a)));
	    println(strcat("方法参数B:", str(b)));
	    println(strcat("方法结果:", str(result)));
	}
}

 在命令窗口随便输入些什么,即可看到BTrace下面的output将会输出指定的变量:

a是测试用的,返回了1261,之后启动了BTrace,可以看到有一行“btrace DEBUG...”,就是进入了可调式状态。输入100(随便输入),返回1339,再看一下vvm:

将会把调用堆栈(指定的add方法的堆栈)输出,然后把参数都打印出来。

 

以上是关于VisualVM-BTrace的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板

VSCode自定义代码片段6——CSS选择器

VSCode自定义代码片段——声明函数