上一篇文章提到我们可以在规则文件中调用自己写的扩展Helper类
看一个例子
新建目标项目和扩展Helper类项目,结构如下
其中目标项目使用上一篇博客的第二个例子的代码
扩展Helper类项目需要用到第三方jar,在C:\byteman-download-4.0.2\lib找到byteman.jar复制过来
TraceHelper.java代码如下
package com.vvvtimes; import org.jboss.byteman.rule.Rule; import org.jboss.byteman.rule.helper.Helper; public class TraceHelper extends Helper { protected TraceHelper(Rule rule) { super(rule); } public boolean myprint(String message) { return super.traceln("!!! IMPORTANT EVENT !!!" + message); } }
将这个项目导出为BytemanHelperDemo.jar
目标项目里的规则文件tracing.btm内容如下,其中HELPER项指定自定义了Helper类名
RULE trace return value1 CLASS com.vvvtimes.Main METHOD add(int,int) HELPER com.vvvtimes.TraceHelper AT EXIT IF true DO myprint("Return value: " +$!) ENDRULE
编译
javac com/vvvtimes/Main.java
运行
java com.vvvtimes.Main
加helper类的规则文件检查,注意多了个-cp BytemanHelperDemo.jar
bmcheck -cp . -cp BytemanHelperDemo.jar -v scripts/tracing.btm
byteman运行
java -cp ".;BytemanHelperDemo.jar;%CLASSPATH%" -javaagent:%BYTEMAN_HOME%\lib\byteman.jar=script:scripts/tracing.btm com.vvvtimes.Main
运行结果如下
如果我们将上面的目标项目打包成jar,则命令可以改成如下形式
目标项目打包成的jar名为BytemanDemo2.jar
运行
java -cp "BytemanDemo2.jar;%CLASSPATH%" com.vvvtimes.Main
加helper类的规则文件检查
bmcheck -cp BytemanDemo2.jar -cp BytemanHelperDemo.jar -v scripts/tracing.btm
byteman运行
java -cp "BytemanDemo2.jar;BytemanHelperDemo.jar;%CLASSPATH%" -javaagent:%BYTEMAN_HOME%\lib\byteman.jar=script:scripts/tracing.btm com.vvvtimes.Main
运行结果如图
原文地址:http://blog.51cto.com/7317859/2112124
时间: 2024-09-30 11:30:17