【发布时间】:2014-11-12 10:34:48
【问题描述】:
我想使用 ASM 来验证某些方法的调用频率以及它们的参数和结果是什么。但是,在运行时,它以 java.lang.LinkageError: loader (instance of sun/misc/Launcher$AppClassLoader): attempted duplicate class definition for name: "com/foo/bar/DefaultType" 结尾。
出于这个原因,我想确保它不是 ASM (Objectweb) 问题,因此它尝试使用以下代码仅传递字节而不进行任何修改:
@Override
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined,
ProtectionDomain protectionDomain, byte[] classfileBuffer)
throws IllegalClassFormatException {
byte[] result;
if(className.startsWith("com/foo/bar"))
{
ClassReader reader = new ClassReader(classfileBuffer);
try
{
ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_FRAMES);
reader.accept(writer, 0);
result = writer.toByteArray();
}
catch(Exception e)
{
result = null;
}
}
else
{
// do nothing
result = null;
}
return result;
}
但即使经过此修改,我也会收到相同的错误。有什么提示我应该改变什么才能让这段代码正常工作吗?
【问题讨论】:
-
不,很遗憾没有。所以我仍然缺少统计数据。
-
:(如果我能找到解决方案,我会告诉你。
标签: javaagents java-bytecode-asm