投稿须知、干货分享浅度渣文

【浅度渣文】BTrace简介

2017-11-21  本文已影响16人  我是杨正

原文链接:http://www.dubby.cn/detail.html?id=9060

别着急着上手,请按捺住你的迫切的心情,稍微花点时间看看BTrace的介绍,然后开始动手操作。注意,这里给出最简单,最基本,也是最常用的使用方法。

BTrace是一个安全的,动态的Java跟踪工具。BTrace通过运行Java程序的动态(字节码)工具类来工作。BTrace将追踪操作插入到正在运行的Java程序的类中,并将跟踪的程序类热插拔。

BTrace术语

BTrace程序结构

BTrace程序是一个普通的Java类,它有一个或多个public static void使用BTrace注释进行注释的方法。注释用于指定跟踪的节目“位置”(也称为“探测点”)。跟踪动作是在静态方法体内部指定的。这些静态方法被称为Action Methods。

BTrace限制

为了保证跟踪动作是“只读的”(即跟踪动作不会改变被跟踪的程序的状态)和有界的(即跟踪动作在有限的时间内终止),一个BTrace程序被允许只做一套有限的行动。特别是一个BTrace类:

一个简单的BTrace程序

// import all BTrace annotations
import com.sun.btrace.annotations.*;
// import statics from BTraceUtils class
import static com.sun.btrace.BTraceUtils.*;

// @BTrace annotation tells that this is a BTrace program
@BTrace
public class HelloWorld {
 
    // @OnMethod annotation tells where to probe.
    // In this example, we are interested in entry 
    // into the Thread.start() method. 
    @OnMethod(
        clazz="java.lang.Thread",
        method="start"
    )
    public static void func() {
        // println is defined in BTraceUtils
        // you can only call the static methods of BTraceUtils
        println("about to start a thread!");
    }
}

上面的BTrace程序可以针对正在运行的Java进程运行。只要目标程序即将按Thread.start()方法启动一个线程,这个程序就会在BTrace客户端打印“about to start a thread!” 。还有其他有趣的探测点。例如,我们可以在方法返回时插入跟踪动作,从方法返回异常,在方法中获取或设置字段,创建对象/数组,创建行号,引发异常等等。

运行BTrace的步骤

首先你需要下载BTrace,可以去Github上下载最新的,如果网络不便访问Github,可以从我的网盘上下载v1.3.9。
Github:https://github.com/btraceio/btrace/releases/tag/v1.3.9
百度网盘:https://pan.baidu.com/s/1kVJ0zXl

  1. 你需要配置BTRACE_HOME,你也可以把$BTRACE_HOME/bin拼接到你的PATH后面。
  2. 用jps找到你想要追踪的Java进程的PID。
  3. 写一个BTrace程序——建议你可以直接从样本中修改。
  4. 使用以下命令来执行追踪btrace <pid> <btrace-script>

BTrace的命令行不仅如此,还可以指定头文件的目录,指定classpath,还可以预编译成class,甚至可以使用BTrace代理启动应用程序,但是,一般来说这些都不常用。所以这里跳过,感兴趣的朋友可以关注我的后续文章,或者直接去Github上看介绍

BTrace注释

从上面的介绍中可以了解到,写Btrace程序,主要就是要了解Btrace给我们提供的各个注解,还有com.sun.btrace.BTraceUtils给我们提供的一些静态方法。

方法注释

参数注释

字段注释

类注释

上一篇下一篇

猜你喜欢

热点阅读