随笔 - 28  文章 - 0  评论 - 0  阅读 - 6406

btrace使用

Btrace使用

介绍

BTrace 是一个动态安全的Java 追踪工具,它通过向运行中的Java 程序植入字节码文件,来对运行中的Java 程序热更新,方便的获取程序运行时的数据信息,并且,保证自己的消耗特别小,大部分情况下不会影响Java 程序的性能。

 

在本例子,利用BTrace打印正在运行的java程序中方法的传入参数、方法返回值、类的成员变量。

安装Btrace

下载v2.2.1

1
https://github.com/btraceio/btrace

  

1
2
export BTRACE_HOME=/root/java_tools/btrace
export PATH=$BTRACE_HOME/bin:$PATH

  

btrace --version

 

java代码调用例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Taa {
 
    public static void main(String[] args) throws Exception {
        Random random = new Random();
        CaseObject caseObject = new CaseObject();
        boolean result = true;
        while (result) {
            String baicai = "mengka AAA..["+TimeUtil.toDate(new Date(),TimeUtil.format_1)+"]";
            result = caseObject.execute(random.nextInt(1000),baicai);
            //result = caseObject.execute(1000);
            System.out.println(baicai);
            Thread.sleep(1000);
        }
    }
 
}

  

1
2
3
4
5
6
7
8
9
10
11
public class CaseObject {
     
    private static int mengka = 0;
 
    public boolean execute(int sleepTime,String baicai) throws Exception {
        System.out.println("sleep: " + sleepTime);
        mengka += sleepTime;
        Thread.sleep(sleepTime);
        return true;
    }
}

  

 

Btrace脚本代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package mengka.btrace_04;
 
import static org.openjdk.btrace.core.BTraceUtils.*;
import org.openjdk.btrace.core.annotations.*;
 
@BTrace
public class TraceMethodArgsAndReturn {
 
 
    //@Self mengka.btrace_04.CaseObject instance,
    @OnMethod(clazz = "mengka.btrace_04.CaseObject", method = "execute", location = @Location(Kind.RETURN))
    public static void traceExecute(@Self Object caseObject, int sleepTime, String baicai, @Return boolean result) {
        println("--------- , test btrace");
 
        /**
         *  打印方法的传入参数
         *
         */
        print(strcat("sleepTime is:", str(sleepTime)));
 
        println(strcat(" , baicai = ", str(baicai)));
 
        /**
         *  打印CaseObject类的某个成员变量
         *
         */
        println(strcat("mengka is:", str(get(field("mengka.btrace_04.CaseObject", "mengka"), caseObject))));
 
        /**
         *  打印方法的返回值
         *
         */
        println(strcat("return value is:", str(result)));
    }
 
}
  • 打印方法的传入参数
  • 打印CaseObject类的某个成员变量
  • 打印方法的返回值

 

1
btrace 1009472 TraceMethodArgsAndReturn.java

  

 

posted on   rabbit-xf  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示