1.btrace介绍
btrace是一款针对Java程序的dynamic trace工具。
2.下载
wget https://github.com/btraceio/btrace/releases/download/v1.3.11.3/btrace-bin-1.3.11.3.zip
3.解压之后的简单使用
btrace/bin/btrace PID trace_script
注:PID是Java程序的进程号,trace_script是用来trace的脚本
示例脚本中的内容如下所示:
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
/**
* * This script traces method entry into every method of
* * every class in javax.swing package! Think before using
* * this script -- this will slow down your app significantly!!
* */
@BTrace public class AllMethods {
@OnMethod(
clazz="/.*/",
method="/.*/"
)
public static void m(@ProbeClassName String probeClass, @ProbeMethodName String probeMethod) {
print(Strings.strcat("entered ", probeClass));
println(Strings.strcat(".", probeMethod));
}
}
注:该脚本可以打印Java应用程序中所有类中方法被调用的情况
4.问题:上述命令中需要指明正在运行的Java应用程序的进程号,需要在Java应用程序启动以后,并且获取进程号,才能开始监控,在Java应用程序启动的过程中,也会发生函数调用(其中可能蕴藏着有用的信息),是否可以在Java应用程序启动时,就对其进行监控?
答案:可以。
本例中的Java应用程序以Jar包的形式发布。
使用到的命令如下所示:
java -javaagent:btrace-agent.jar=script=AllMethods.class,scriptOutputFile=app.log -jar app.jar
其中,trace script原本是java程序,使用下述命令进行编译,编译之后得到AllMethods.class
btrace/bin/btracec AllMethods.java
动态追踪的结果在app.log中,Java应用程序在app.jar中
示例demo程序的链接:demo.rar