• Btrace的使用方法


    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践 第2版》

    写在前面:

    Btrace有很多用法,比如说性能监视,连接泄露,内存泄漏,多线程竞争,而本文说的只是最基本的应用打印调用堆栈,参数和返回值

    Btrace简介

    Btrace是一个VisualVM插件,作用是在不停止目标程序的前提下,通过HotSpot的HotSwap技术动态加入原本并不存在的调试代码,这个在实际生产中很有意义。

    Btrace安装

    打开VisualVM,然后选择工具->插件->可用插件->Btrace,然后安装即可

    Btrace跟踪

    在VisualVM中,选中应用程序->右键->trace application然后就出现了下面的像java编辑器的代码

    现在用一个测试程序来测试一下:

    1,新建一个BtraceTest类

    package com.lyy;
    
    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[] ages)throws Exception{
            BtraceTest btraceTEst = 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(btraceTEst.add(a,b));
            }
        }
    }

    2,启动这个应用程序,程序处于阻塞状态,等待用户输入

    3,打开VisualVM,找到对应的应用程序,右键->trace application

    4,在Btrace中添加要追踪的方法,点击start

    /* BTrace Script Template */
    import com.sun.btrace.annotations.*;
    import static com.sun.btrace.BTraceUtils.*;
    
    @BTrace
    public class TracingScript {
        @OnMethod
        (
        clazz       = "com.lyy.BtraceTest",
        method      = "add",
        location    = @Location( Kind.RETURN )
        )
    public static void func(@Self com.lyy.BtraceTEst instance, int a, int b,@Return int result){
        println("调用堆栈:");
        jstack();
        println(strcat("方法参数A:",str(a)));
        println(strcat("方法参数B:",str(b)));
        println(strcat("方法结果:",str(result)));
        }
    }

    5,在应用程序中调用追踪的方法,然后切换到VisualVM中,看看监听的值

  • 相关阅读:
    编程之类 字符串包括问题
    Performance Counter的使用
    MVVM Light Toolkit使用指南
    Lambda表达式详解
    C#线程篇---Task(任务)和线程池不得不说的秘密(5)
    在WPF中如何使用RelativeSource绑定
    WPF中使用ObjectDataProvider绑定方法
    免费的精品: Productivity Power Tools 动画演示
    使用Myeclipse进行简单webservice开发的示例
    <context:component-scan>使用说明
  • 原文地址:https://www.cnblogs.com/ningheshutong/p/9041328.html
Copyright © 2020-2023  润新知