Btrace使用

2021-01-16  本文已影响0人  SparkOnly

btrace是一个java平台上使用的动态追踪工具

btrace工具下载

github的地址为:https://github.com/btraceio/btrace/tree/master
下载地址为:https://github.com/btraceio/btrace/releases
这里记录下我对btrace的使用示例

代码编写

新建maven工程

其中配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.ye</groupId>
    <artifactId>btrace</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.sun.tools.btrace</groupId>
            <artifactId>btrace-boot</artifactId>
            <version>1.2.3</version>
        </dependency>

        <dependency>
            <groupId>com.sun.tools.btrace</groupId>
            <artifactId>btrace-agent</artifactId>
            <version>1.2.3</version>
        </dependency>

        <dependency>
            <groupId>com.sun.tools.btrace</groupId>
            <artifactId>btrace-client</artifactId>
            <version>1.2.3</version>
        </dependency>
    </dependencies>
</project>

代码示例

import com.sun.btrace.AnyType;
import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.*;

import java.lang.reflect.Field;

@BTrace
public class BtraceApollo {

    //@OnMethod(clazz = "com.ctrip.framework.apollo.biz.config.BizConfig", method = "/.*/", location = @Location(Kind.ENTRY))
    /*public static void config(@ProbeClassName String pcm, @ProbeMethodName String pmn, AnyType[] args){
        BTraceUtils.println("any config...");
        BTraceUtils.printArray(args);
        BTraceUtils.println(pcm+","+pmn);
        BTraceUtils.println();
    }*/

    @OnMethod(clazz = "com.ctrip.framework.apollo.common.config.RefreshableConfig", method = "getValue", location = @Location(Kind.RETURN))
    public static void getValue(@ProbeClassName String pcm, @ProbeMethodName String pmn, AnyType[] args, @Return Object retVal){
        BTraceUtils.println("RefreshableConfig getValue...");
        BTraceUtils.printArray(args);
        BTraceUtils.println(pcm+","+pmn);
        BTraceUtils.println(BTraceUtils.str(retVal));
        BTraceUtils.println();
    }
}

代码中只能使用BTraceUtils的方法,否则使用的时候会报错
上面的代码是对Apollo取配置信息的地方进行拦截处理,打印出参数,类名,方法名,返回值

使用方法

  1. 获取Java进程的pid
jps
image.png

这里取apollo-adminservice.jar的进程id 26907

  1. attach到进程上
    进到下载的btrace目录中,执行以下命令
btrace/bin/btrace 26907 BtraceApollo.java
  1. 执行方法,观测日志


    image.png

    可以看到,打印出参数,类名,方法名,返回值。符合预期

上一篇 下一篇

猜你喜欢

热点阅读