首页 > 其他分享 >btrace使用总结(完全突破安全限制,引用第三方包)

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

时间:2022-12-27 19:36:51浏览次数:63  
标签:annotations sun BTrace 引用 import btrace com 第三方


由于认识J​​AVA代码热更新​​在先,所以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使用总结(江南白衣)​

标签:annotations,sun,BTrace,引用,import,btrace,com,第三方
From: https://blog.51cto.com/u_4176761/5973422

相关文章

  • JAVA各种引用(Reference)的汇总
    HardReference强引用一般的人一般的程序最常用的引用SoftReference软引用除非JVM即将OutOfMemory,否则不会被GC回收。这个特性使得它特别适合设计对象Cache。对于Cache,我们......
  • Web项目如何引用其他java项目
    Web项目为DynamicWebProject,Tomcat插件下载地址:http://tomcatplugin.sf.net/update1.将tomcatplugin插件中的DevloaderTomcat7.jar拷贝到tomcat安装目录下的lib文件......
  • iOS第三方开源库的吐槽和备忘
    做iOS开发总会接触到一些第三方库,这里整理一下,做一些吐槽。 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在GoogleCode、SourceForg......
  • uni-app 第三方应用中调起微信分享
    uni-app第三方应用中调起微信分享 最近做项目的时候遇到一个问题在APP中的某个单独的小项目中使用uni-app写的项目调起微信分享单独引入jweixin-1.6.0.js在需要分享......
  • JavaScript 深拷贝的循环引用问题
    如果说道实现深拷贝最简单的方法,我们第一个想到的就是JSON.stringify()方法,因为JSON.stringify()后返回的是字符串,所以我们会再使用JSON.parse()转换为对象,如下代码:let......
  • 自研的数据产品迭代了一年多,为什么不买第三方商业数据平台产品呢?
    话题中今天随便聊一个话题,自研的数据产品迭代了一年多,为什么不买第三方商业数据平台产品呢?(整篇是边想边码字流水文,欠缺点逻辑组织)大数据产品研发现状多企业在大数据建设中会......
  • C# 第三方DLL,可以实现PDF转图片,支持32位系统、64位系统
    itextsharp.dll,是一个开源的在C#中用来生成PDF文档的库文件,不少C#爱好者用它制作出了PDF文档生成器。使用时只需在你的C#项目中添加引入此组件即可,使用方法网上有很多,自己查......
  • 加载第三方编译安装库
    转:https://blog.csdn.net/oceanstudy123/article/details/121656238加载动态库,以下方法,一般用于处理cannotopensharedobjectfile:Nosuchfileordirectory。   ......
  • SpringBoot的Maven项目使用SystemPath引用本地jar
    对于本地jar的maven引用,在不方便使用私有maven仓库的情况下,使用SystemPath方式引用还是比较合适的,这里以uid-generator-1.0.0-SNAPSHOT.jar这个本地包为例。1.将打好的包拷......
  • 用Echarts实现前端表格引用从属关系可视化
    在金融行业,我们经常会有审计审查的需求,对某个计算结果进行审查,但是这个计算结果可能依赖多个单元格,而且会有会有多级依赖的情况,如果让我们的从业人员靠眼睛找,工作量巨大,而且......