javaagent(使用Javassist编写)工作不正常
我正在编写一个java代理,并使用javassist库修改字节码。 我有一个代理主类MyAgent和一个类file transformer类。java注册transformer类MyClzTransformer - 当我以javaagent的形式运行MyAgent jar时,如下所示:javaagent(使用Javassist编写)工作不正常,java,instrumentation,javassist,javaagents,Java,Instrumentation,Javassist,Javaagents,我正在编写一个java代理,并使用javassist库修改字节码。 我有一个代理主类MyAgent和一个类file transformer类。java注册transformer类MyClzTransformer - 当我以javaagent的形式运行MyAgent jar时,如下所示: java -javaagent:<path to myagent.jar> a.b.MyTestProgram 我没有任何日志输出 这是一个类加载器问题吗?因为,clPool.getclassNa
java -javaagent:<path to myagent.jar> a.b.MyTestProgram
我没有任何日志输出
这是一个类加载器问题吗?因为,clPool.getclassName之后的日志未执行。我没有从try块中获得任何输出。有一个基本错误。而类名由/分隔,即如果className.startsWitha/b/使用相同的格式calssName 加载不正确的类 修复程序是CtClass-CtClass=clPool.getclassName.replaceAll/
public class MyClzTransformer implements ClassFileTransformer
{
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException
{
if (className.startsWith("a/b/"))
{
ClassPool clPool = ClassPool.getDefault();
System.out.println("clPool =======> " + clPool);
try
{
CtClass ctClass = clPool.get(className);
System.out.println("ct class: " + ctClass + ": methods = " + Arrays.deepToString(ctClass.getMethods()));
for(CtMethod method : ctClass.getMethods())
{
method.insertAfter("System.out.println(\" ============ added instrumented code ============ \");");
}
}
catch (NotFoundException | CannotCompileException | IOException e)
{
e.printStackTrace();
}
}
return classfileBuffer;
}
}
java -javaagent:<path to myagent.jar> a.b.MyTestProgram