• 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方法的堆栈)输出,然后把参数都打印出来。

  • 相关阅读:
    git 忽略文件 .gitignore 以及规则
    Syncovery : Google Docs protocol completely replaced with Google Drive
    Syncovery 是目前功能最为强大的实时自动备份工具
    FolderSync Instant sync 即时同步
    FolderSync :The various features and how to use them
    How do I use Tasker to run a sync in FolderSync?
    知识共享
    HowTo: Restart SSH Service under Linux / UNIX
    Node.js是一个事件驱动I/O服务端JavaScript环境
    WordPress 客户端软件列表
  • 原文地址:https://www.cnblogs.com/xiashiwendao/p/6511587.html
Copyright © 2020-2023  润新知