美文网首页
BTrace的使用

BTrace的使用

作者: 谁说咖啡不苦 | 来源:发表于2019-05-06 22:09 被阅读0次

简介

  • BTrace可以动态地向目标应用程序的字节码注入追踪代码
  • 所依赖的技术: JavaComplierApi、JVMTI、Agent、Instrumentation + ASM

BTrace安装

新建环境变量: BTRACE_HOME, 下载Release来使用。

简单的使用

package com.songshuang.btrace;

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

@BTrace
public class PrintArgSimple{

    @OnMethod(
        clazz="com.songshuang.sentinel.monitor.chapter2.BtraceController",
        method="arg",
        location=@Location(Kind.ENTRY)
    )
    public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, AnyType[] args) {
        BTraceUtils.printArray(args);
        BTraceUtils.println(pcn + ", " + pmn);
        BTraceUtils.println();
    }
}
  • @BTrace: 表明是BTrace脚本
  • @OnMethod: 需要拦截的方法
    • clazz: 拦截的对象的class的完成路径名称
    • method: 拦截的方法
    • location: 拦截方法的时机: Kind.ENTRY,表示在进入这个方法的时候,进行拦截
  • @ProbeClassName: 拦截的方法的类名
  • @ProbeMethodName: 拦截的方法名
  • AnyType[] args: 拦截的方法参数

拦截方法

  • 普通方法@OnMethod(clazz="xxxxxx.xxxxx", method="yyyy")
  • 构造函数@OnMethod(clazz="xxx.xxx", method="<init>")
  • 拦截同名, 用参数来区分
@BTrace
public class PrintSame {
   
   @OnMethod(
       clazz = "com.xxx.xxx",
       method= "methodName"
   )
   public static void anyRead(@ProbeClassName String pcn, @ProbeMehtodName String pmn, String name, int id) {
       BTraceUtils.println(pcn + "," + pmn + "," + name + "," + id);
       BTraceUtils.println();
   }
   
    @OnMethod(
       clazz = "com.xxx.xxx",
       method= "methodName"
   )
   public static void anyRead(@ProbeClassName String pcn, @ProbeMehtodName String pmn, String name) {
       BTraceUtils.println(pcn + "," + pmn + "," + name + "," + id);
       BTraceUtils.println();
   }
}

拦截两个相同名字的函数,不同参数的方法,一个方法传递一个String和Int两个参数,一个方法只传递String的参数。


拦截时机

  • Kind.ENTRY: 入口,默认值
  • Kind.RETURN: 返回
  • Kind.THROW: 异常
  • Kind.Line: 行

拦截返回:

@BTrace
public class PrintArgSimple{

    @OnMethod(
        clazz="com.songshuang.sentinel.monitor.chapter2.BtraceController",
        method="arg",
        location=@Location(Kind.RETURN)
    )
    public static void anyRead(@ProbeClassName String pcn, @ProbeMethodName String pmn, @Return AnyType return) {
        BTraceUtils.printArray(args);
        BTraceUtils.println(pcn + ", " + pmn);
        BTraceUtils.println();
    }
}

@Return表示就是获取返回的数据


拦截异常: 具体可以参考官方demo

@BTrace
public class PrintArgSimple{
    // store current exception in a thread local
    // variable(@TLS annotation). Note that we can't
    // store it in a global variable!
    @TLS
    static Throwable currentException;
    
    @OnMethod(
        clazz="java.lang.Throwable",
        method="<init>"
    )
    public static void onThrow(@Self Throwable self, Throwable cause) {
        currentException = self;
    }

    @OnMethod(
clazz="com.songshuang.sentinel.monitor.chapter2.BtraceController",
        method="arg",
        location=@Location(Kind.THROW)
    )
    public static void anyException() {
        if (currentException != null) {
            BTraceUtils.Threads.jstack(currentException);
            currentException = null;
        }
    }
}

相关文章

  • BTrace:线上问题排查工具

    BTrace简介 GitHub地址:BTrace 下载地址:v1.3.11.3 官方使用教程:Btrace使用教程...

  • 用btrace分析线上服务

    部署 btrace1.2.5.1已经部署到集群/home/xjyin/btrace-1.2.5.1 使用方式 基本...

  • btrace 使用

    环境 应用由Jave Service Wrapper 启动,在wrapper的配置文件里启用了-XX:+Disab...

  • Btrace使用

    btrace是一个java平台上使用的动态追踪工具 btrace工具下载 github的地址为:https://g...

  • BTrace的使用

    简介 BTrace可以动态地向目标应用程序的字节码注入追踪代码 所依赖的技术: JavaComplierApi、J...

  • Btrace学习笔记二

    Btrace拦截行号 被拦截对象(Btrace只能在本地运行) 拦截行号的btrace脚本 运行btrace脚本 ...

  • Btrace UserGuide翻译转载

    原文地址:BTrace用户手册<译> BTrace(https://btrace.dev.java.net/) 是...

  • BTrace使用小结

    简介 BTrace是一个安全的JVM动态追踪工具,最初为原Sun公司Kenai项目下面的一个子项目。 典型的使用场...

  • 使用Btrace进行代码调试

    Btrace简介 Btrace是SUN公司开发的一款动态的Trace工具.Btrace最大的好处是可以自己编写脚本...

  • BTrace:Java 线上问题排查神器

    BTrace 是什么 BTrace 是检查和解决线上的问题的杀器,BTrace 可以通过编写脚本的方式,获取程序执...

网友评论

      本文标题:BTrace的使用

      本文链接:https://www.haomeiwen.com/subject/okujoqtx.html