java 在线找bug 神器 btrace
2012-07-31 19:16
134 查看
示例地址 : http://kenai.com/projects/btrace/sources/hg/show/samples
1. 示例代码
示例代码定义了Counter计数器,有一个add()方法,每次增加随机值,总数保存在totalCount属性中。
Btracetest.java代码
![](http://learnworld.iteye.com/images/icon_star.png)
package com.learnworld;
import java.util.Random;
public class BTraceTest {
public static void main(String[] args) throws Exception {
Random random = new Random();
// 计数器
Counter counter = new Counter();
while (true) {
// 每次增加随机值
counter.add(random.nextInt(10));
Thread.sleep(1000);
}
}
}
Counter.java代码
![](http://learnworld.iteye.com/images/icon_star.png)
package com.learnworld;
public class Counter {
// 总数
private static int totalCount = 0;
public int add(int num) throws Exception {
totalCount += num;
sleep();
return totalCount;
}
public void sleep() throws Exception {
Thread.sleep(1000);
}
}
2. 常见使用场景
下面通过几个常见使用场景演示如何使用BTrace脚本。
1) 获取add()方法参数值和返回值。
Java代码
![](http://learnworld.iteye.com/images/icon_star.png)
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
public class TracingScript {
@OnMethod(
clazz="com.learnworld.Counter",
method="add",
location=@Location(Kind.RETURN)
)
public static void traceExecute(int num,@Return int result){
println("====== ");
println(strcat("parameter num: ",str(num)));
println(strcat("return value:",str(result)));
}
}
2) 定时获取Counter类的属性值totalCount。
Java代码
![](http://learnworld.iteye.com/images/icon_star.png)
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
public class TracingScript {
private static Object totalCount = 0;
@OnMethod(
clazz="com.learnworld.Counter",
method="add",
location=@Location(Kind.RETURN)
)
public static void traceExecute(@Self com.learnworld.Counter counter){
totalCount = get(field("com.learnworld.Counter","totalCount"), counter);
}
@OnTimer(1000)
public static void print(){
println("====== ");
println(strcat("totalCount: ",str(totalCount)));
}
}
3) 获取add方法执行时间。
Java代码
![](http://learnworld.iteye.com/images/icon_star.png)
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
public class TracingScript {
@TLS private static long startTime = 0;
@OnMethod(
clazz="com.learnworld.Counter",
method="add"
)
public static void startExecute(){
startTime = timeNanos();
}
@OnMethod(
clazz="com.learnworld.Counter",
method="add",
location=@Location(Kind.RETURN)
)
public static void endExecute(@Duration long duration){
long time = timeNanos() - startTime;
println(strcat("execute time(nanos): ", str(time)));
println(strcat("duration(nanos): ", str(duration)));
}
}
4) 获取add()方法调用方法sleep()次数。
Java代码
![](http://learnworld.iteye.com/images/icon_star.png)
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
public class TracingScript {
private static long count;
@OnMethod(
clazz="/.*/",
method="add",
location=@Location(value=Kind.CALL, clazz="/.*/", method="sleep")
)
public static void traceExecute(@ProbeClassName String pcm, @ProbeMethodName String pmn,
@TargetInstance Object instance, @TargetMethodOrField String method){
println("====== ");
println(strcat("ProbeClassName: ",pcm));
println(strcat("ProbeMethodName: ",pmn));
println(strcat("TargetInstance: ",str(classOf(instance))));
println(strcat("TargetMethodOrField : ",str(method)));
count++;
}
@OnEvent
public static void getCount(){
println(strcat("count: ", str(count)));
}
}
1. 示例代码
示例代码定义了Counter计数器,有一个add()方法,每次增加随机值,总数保存在totalCount属性中。
Btracetest.java代码
![](http://learnworld.iteye.com/images/icon_star.png)
package com.learnworld;
import java.util.Random;
public class BTraceTest {
public static void main(String[] args) throws Exception {
Random random = new Random();
// 计数器
Counter counter = new Counter();
while (true) {
// 每次增加随机值
counter.add(random.nextInt(10));
Thread.sleep(1000);
}
}
}
Counter.java代码
![](http://learnworld.iteye.com/images/icon_star.png)
package com.learnworld;
public class Counter {
// 总数
private static int totalCount = 0;
public int add(int num) throws Exception {
totalCount += num;
sleep();
return totalCount;
}
public void sleep() throws Exception {
Thread.sleep(1000);
}
}
2. 常见使用场景
下面通过几个常见使用场景演示如何使用BTrace脚本。
1) 获取add()方法参数值和返回值。
Java代码
![](http://learnworld.iteye.com/images/icon_star.png)
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
public class TracingScript {
@OnMethod(
clazz="com.learnworld.Counter",
method="add",
location=@Location(Kind.RETURN)
)
public static void traceExecute(int num,@Return int result){
println("====== ");
println(strcat("parameter num: ",str(num)));
println(strcat("return value:",str(result)));
}
}
2) 定时获取Counter类的属性值totalCount。
Java代码
![](http://learnworld.iteye.com/images/icon_star.png)
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
public class TracingScript {
private static Object totalCount = 0;
@OnMethod(
clazz="com.learnworld.Counter",
method="add",
location=@Location(Kind.RETURN)
)
public static void traceExecute(@Self com.learnworld.Counter counter){
totalCount = get(field("com.learnworld.Counter","totalCount"), counter);
}
@OnTimer(1000)
public static void print(){
println("====== ");
println(strcat("totalCount: ",str(totalCount)));
}
}
3) 获取add方法执行时间。
Java代码
![](http://learnworld.iteye.com/images/icon_star.png)
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
public class TracingScript {
@TLS private static long startTime = 0;
@OnMethod(
clazz="com.learnworld.Counter",
method="add"
)
public static void startExecute(){
startTime = timeNanos();
}
@OnMethod(
clazz="com.learnworld.Counter",
method="add",
location=@Location(Kind.RETURN)
)
public static void endExecute(@Duration long duration){
long time = timeNanos() - startTime;
println(strcat("execute time(nanos): ", str(time)));
println(strcat("duration(nanos): ", str(duration)));
}
}
4) 获取add()方法调用方法sleep()次数。
Java代码
![](http://learnworld.iteye.com/images/icon_star.png)
import com.sun.btrace.annotations.*;
import static com.sun.btrace.BTraceUtils.*;
@BTrace
public class TracingScript {
private static long count;
@OnMethod(
clazz="/.*/",
method="add",
location=@Location(value=Kind.CALL, clazz="/.*/", method="sleep")
)
public static void traceExecute(@ProbeClassName String pcm, @ProbeMethodName String pmn,
@TargetInstance Object instance, @TargetMethodOrField String method){
println("====== ");
println(strcat("ProbeClassName: ",pcm));
println(strcat("ProbeMethodName: ",pmn));
println(strcat("TargetInstance: ",str(classOf(instance))));
println(strcat("TargetMethodOrField : ",str(method)));
count++;
}
@OnEvent
public static void getCount(){
println(strcat("count: ", str(count)));
}
}
相关文章推荐
- 利用btrace在线监控java程序状态
- 利用btrace在线监控java程序状态
- 2017 JAVA神器 Btrace详细介绍
- 利用btrace工具监控在线运行java程序
- 利用btrace在线监控java程序状态
- 利用btrace在线监控java程序状态
- JAVA小程序-------在线聊天系统
- Java bug导致用户有被大面积攻击的风险
- JAVA开发人员常用在线文档
- java在线预览txt、word、ppt、execel,pdf代码
- Oracle DBA神器:PRM灾难恢复工具,Schema级别数据恢复。JAVA图形化界面版Oracle DUL
- Ueditor1.4.3版本开发中撞见的BUG,主要是多图上传中的在线管理
- 在线------JSON转换生成JAVA类
- Java贪食蛇编程日志(一) 随即产生Enum元素的Bug
- office转pdf(在线预览)思路(java示例)
- Java统计学习之道:统计java网站访问量和在线人数
- java在线聊天项目 swt可视化窗口Design 重新设计好友列表窗口 增加菜单栏
- java 在线查看本地pdf文档或者图片
- 在线编程语言模拟(Java,C,Python,R语言,Ruby,PHP,Perl,Go等)
- Java中static变量相互引用导致的Bug