BTrace工具使用简介
案例描述
使用test方法接收一个int类型参数,根据参数放入map中两个字符串。
现代码中没有打印出任何的日志,导致产生的int值无法确定,以及执行路径无法确定,这个时候可以使用BTrace来跟踪、分析程序路径。
import java.util.HashMap; import java.util.Map; import java.util.Random; public class TestHello { public static void main(String[] args) throws InterruptedException { Thread.sleep(2000 * 10); TestHello th = new TestHello(); Random random = new Random(47); th.test(random.nextInt(9) + 1); } private Map<String, String> model = new HashMap<String, String>(); public boolean test(int age) { String variable1 = "默认提示信息:你输入的参数是:" + age; String variable2 = "欢迎观临网上乐园"; model.put("variable1", variable1); model.put("variable2", variable2); if (age >= 1 && age <= 5) { variable1 = "你的输入参数介于1和5之间"; variable2 = "欢迎小朋友玩益智类游戏"; model.put("variable1", variable1); model.put("variable2", variable2); return true; } else if (age > 5 && age <= 10) { variable1 = "你的输入参数介于5和10之间"; variable2 = "欢迎小朋友进入英语游乐场"; model.put("variable1", variable1); model.put("variable2", variable2); return false; } else { return true; } } }
BTrace脚本:
import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; import java.util.HashMap; @BTrace public class BTraceField { @OnMethod(clazz="java.util.HashMap", method="put") public static void m(@Self HashMap map, Object Key, Object value) { // all calls to the methods with signature "()" println("===================="); print(Key); print(":"); println(value); } @OnMethod(clazz="TestHello", method="test") public static void d(@Self Object obj, int age){ print("test method is called, input age="); println(age); } }
首先运行TestHello
使用jps查找TestHello的PID,输入btrace <pid> BTraceField.java
输出:
test method is called, input age=3
====================
variable1:默认提示信息:你输入的参数是:3
====================
variable2:欢迎观临网上乐园
====================
variable1:你的输入参数介于1和5之间
====================
variable2:欢迎小朋友玩益智类游戏
其他相关博文
BTrace工具简介http://mgoann.iteye.com/blog/1409667
BTrace实例应用http://mgoann.iteye.com/blog/1409676
BTrace实际案例分析http://mgoann.iteye.com/blog/1409685
分享到:
相关推荐
BTrace 是一个强大的、安全的、动态的Java应用程序诊断工具,它允许开发者在运行时对Java应用进行细粒度的监控和性能分析。BTrace利用了Java的动态代理机制(Java Agent)和ASM字节码库,能够在不中断程序运行的情况...
【标题】"btrace1.3.9"指的是BTrace工具的一个特定版本,1.3.9,这是一款强大的Java应用程序动态跟踪工具。BTrace利用Java的JVMTI(Java Virtual Machine Tool Interface)和Serviceability Agent(SA)来提供安全、...
BTrace,一个强大的Java诊断工具,其主要功能是在线无侵入地对生产环境中的Java应用程序进行动态跟踪和性能分析。它的实现原理主要依赖于四个核心组件:Java Agent、ASM、Java Instrument API以及Java Compiler API...
在IT行业中,BTrace是一个非常实用的工具,它主要用于Java应用程序的动态跟踪和诊断。本文将深入探讨“BTrace二三事之二:OnMethod子类匹配BUG(怀疑)”这一主题,结合源码分析和实际工具应用,揭示可能存在的问题...
- 下载并解压Btrace工具。 - 编写监控脚本(如UrsInterfaceCalls.java),明确指定要监控的类和方法。 - 设置JDK和Btrace的环境变量,确保脚本可以正确运行。 - 获取Tomcat进程号,以便于连接和监控。 - 启动...
综上所述,Btrace是一个强大的工具,它允许开发者在不中断Java应用程序运行的情况下进行实时调试,通过其提供的丰富的API和脚本语言,可以实现各种定制化的监控和分析任务。对于处理大型复杂系统,特别是生产环境中...
Java在线问题诊断工具是一种用于监控和诊断Java应用程序运行时问题的工具,它可以动态地追踪正在运行的Java程序,而对运行中的代码侵入性小,对性能的影响可以忽略不计。这类工具通常利用Java代码和JavaSE的新特性...
- **btrace**:动态追踪工具,无需重新编译或重启应用即可进行调试。 - **crash**:命令行工具,用于分析核心转储文件。 - **TProfiler**:阿里巴巴开源的性能分析工具,用于JVM应用的性能监控。 - **HouseMD**:...
btrace是一个动态跟踪工具,它可以在不停机的情况下执行跟踪。google-perf-tools提供了Tcmalloc内存分配库,可以提高内存分配的效率。 在内存问题案例部分,文中提到了几个典型的案例,比如OOM(OutOfMemoryError)...
例如,BTrace 和 Arthas 就是利用 Javaagent 来实现动态跟踪和诊断的工具。 总之,Javaagent 提供了一种在运行时修改 Java 应用程序行为的能力,通过 `premain` 方法和 `Instrumentation` 接口,开发者可以实现诸如...
此外,还有btrace和TProfiler等高级诊断工具,以及Arthas等动态诊断框架。 Java内存模型规定了线程间的数据可见性和原子性,遵循happens-before原则,以保证程序的正确执行。synchronized和volatile关键字用于实现...