VisualVM实现不中断程序和修改代码的前提下打印函数的入参和返回值
在VisualVM中下载BTrace插件
安装此插件并激活
写调试程序
public class BTraceTest {
public int add(int a, int b) {
return a + b;
}
public static void main(String[] args) throws IOException {
BTraceTest test = new BTraceTest();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for (int i=0; i < 10; i++) {
reader.readLine();
int a = (int) Math.round(Math.random() * 1000);
int b = (int) Math.round(Math.random() * 1000);
System.out.println(test.add(a, b));
}
}
}
运行并写在BTrace中写调试程序
用VisualVM模式下进行调试
找到运行的程序
右击添加BTrace调试代码
/* BTrace Script Template */
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
public class TracingScript {
/* put your code here */
@OnMethod(
clazz="com.baiyuliuguang.test.JVMTest.BTraceTest",
method="add",
location=@Location(Kind.RETURN)
)
public static void func(@Self com.baiyuliuguang.test.JVMTest.BTraceTest instance,int a, int b,@Return int result){
println("调用堆栈:");
jstack();
println(strcat("方法参数A:", str(a)));
println(strcat("方法参数B:", str(b)));
println(strcat("方法结果:", str(result)));
}
}
点击start开启调试
运行结果
可以对比看到运行结果与BTrace调试输出结果一致,但是我们没有增加任何源代码,只需要在BTrace中增加调试即可。
学习如逆水行舟,不进则退。