btrace使用总结(完全突破安全限制,引用第三方包)

简介: btrace使用总结(完全突破安全限制,引用第三方包)

由于认识JAVA代码热更新在先,所以Btrace这一神器似乎失去了一些光芒,但他的优势是无任何侵入性,可以做一些代码热更新没法做的事情,做到两者互补。

比如

1 可以直接运行java文件,少了一步编译,更可以在线上直接修改代码

2.可以独立的打印到单独的文件中

3.想进第三方jar包里的方法里方法内的数据track,

4.输入和返回数据track

5.内存不够时的track

6.异常未有捕获时的track

Kind.Error, Kind.Throw和 Kind.Catch

Throw:异常抛出,Catch:异常被捕获,Error:异常没被捕获而被抛出函数之外,主要用于对某些异常情况的跟踪。

缺点:

1.BTrace植入过的代码,会一直在,直到应用重启为止。所以即使BTrace退出了,业务函数每次执行时都会多出一次BTrace是否Attach状态的判断。

2.必须到相关java进程所在的机器上去执行,不能远程执行

1.如何解除安全限制:

只能调用BTraceUtils 里的一系列方法和脚本里定义的static方法,不允许其他调用任何类的任何方法。 比如不允许创建对象,比如不允许For 循环等等

但我们其实很需要调用第三方包,自己写的类,所以如何突破限制呢?

命令行加 -u,BTrace类的头加上@BTrace(trusted=true)

2.如何引用第三方包:

-cp .:game-common.jar:game-data-1.0.0-RELEASE.jar

每个jar包都要显式的列出来,这个有点笨,不能直接指向一个目录?有什么更好的办法请告之。

3.打印到单独的文件,并可以一直tracer

./btrace  -cp .:game-common.jar:game-data-1.0.0-RELEASE.jar -u -v 15659   HelloWorld.java > btrace.log 2>&1 &

package com.sun.btrace.samples;
import static com.sun.btrace.BTraceUtils.println;
import com.imi.common.id.ServerObject;
import com.imi.common.util.StringUtil;
import com.sun.btrace.BTraceUtils;
import com.sun.btrace.annotations.BTrace;
import com.sun.btrace.annotations.Duration;
import com.sun.btrace.annotations.Kind;
import com.sun.btrace.annotations.Location;
import com.sun.btrace.annotations.OnMethod;
import com.sun.btrace.annotations.Return;
import com.sun.btrace.annotations.Self;
@BTrace(trusted=true)
public class HelloWorld {
  @OnMethod(clazz = "com.imi.gate.action.UserAction", method = "login", location = @Location(value = Kind.RETURN))
  public static void onUserAction_login(@Return Void value, @Duration long duration) {
    println("interval:" + duration / 1000000);
  }
  @OnMethod(clazz = "com.imi.common.id.ServerObject", method = "newId", location = @Location(value = Kind.ENTRY))
  public static void onnewId(@Self ServerObject value) {
    {
      println(StringUtil.format("id={}", value.getId()));
      if(value.getId()>0){
        BTraceUtils.jstack();
      }
    }
  }
}

 

 

BTrace是神器,每一个需要每天解决线上问题,但完全不用BTrace的Java工程师,都是可疑的 -- 凯尔文. 萧

下载地址:

http://github.com/btraceio/btrace

参考文档:

BTrace使用总结(江南白衣)

目录
相关文章
|
监控 Java Shell
基于python+uiautomator2,2020.12月最新库的使用方法,更新watcher使用方法(三)
WatchContext,目前的这个watch_context是用threading启动的,每2s检查一次 目前还只有click这一种触发操作
1671 0
|
存储 缓存 前端开发
关于Android SurfaceView截屏总结
关于Android SurfaceView截屏总结
1972 0
|
分布式计算 算法 搜索推荐
阿里巴巴内部:2022年全技术栈PPT分享(架构篇+算法篇+大数据)
我只截图不说话,PPT大全,氛围研发篇、算法篇、大数据、Java后端架构!除了大家熟悉的交易、支付场景外,支撑起阿里双十一交易1682亿元的“超级工程”其实包括以下但不限于客服、搜索、推荐、广告、库存、物流、云计算等。 Java核心技术栈:覆盖了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。 大数据:Spark、Hadoop
|
11月前
|
Java
BTrace如何使用?
BTrace如何使用?
258 0
|
监控 Java 测试技术
性能工具之Java分析工具BTrace入门
【5月更文挑战第25天】性能工具之Java分析工具BTrace入门
302 2
|
11月前
|
Windows
电脑D盘和E盘不见了怎么办?教你如何找回丢失的磁盘分区
当我们打开电脑时,突然发现原本熟悉的 D 盘和 E 盘不见了,这种情况可能让人措手不及,尤其是当这些磁盘里存有重要文件时。别担心,本文会介绍一下出现这种问题的常见原因,以及如何一步步恢复丢失的分区。
yolov5项目如何安装pycocotools和opencv-python?
本文提供了解决yolov5项目中安装pycocotools和opencv-python包失败的两种方法:手动安装或使用国内镜像源进行安装。
yolov5项目如何安装pycocotools和opencv-python?
|
移动开发 安全 Android开发
探索安卓应用开发的新趋势:Kotlin与Jetpack Compose的融合
在移动开发领域,Android系统持续创新,为开发者提供更高效的工具和框架。近年来,Kotlin语言因其简洁性和现代化特性成为Android开发的首选语言。与此同时,Jetpack Compose作为一种新的UI工具集,正改变着Android界面的开发方式。本文将深入探讨Kotlin与Jetpack Compose的结合使用,分析它们如何共同推动Android应用开发进入一个更加高效、可维护和响应式的新时代。
|
Java
Java【付诸实践 04】Jar包class文件反编译、修改、重新编译打包方法(含反编译工具jd-gui-windows-1.6.6.zip百度云资源)
Java【付诸实践 04】Jar包class文件反编译、修改、重新编译打包方法(含反编译工具jd-gui-windows-1.6.6.zip百度云资源)
1801 0