From 94b95b2ab681396770aafe53ea900495b0e09959 Mon Sep 17 00:00:00 2001 From: hengyunabc Date: Tue, 14 Jul 2020 10:31:49 +0800 Subject: [PATCH] fix jsr problem. #1304 --- .../com/taobao/arthas/bytekit/utils/AsmUtils.java | 13 +++++++++++++ .../com/taobao/arthas/core/advisor/Enhancer.java | 2 ++ 2 files changed, 15 insertions(+) diff --git a/bytekit/src/main/java/com/taobao/arthas/bytekit/utils/AsmUtils.java b/bytekit/src/main/java/com/taobao/arthas/bytekit/utils/AsmUtils.java index fda94f61d..a753b7ae6 100644 --- a/bytekit/src/main/java/com/taobao/arthas/bytekit/utils/AsmUtils.java +++ b/bytekit/src/main/java/com/taobao/arthas/bytekit/utils/AsmUtils.java @@ -155,6 +155,19 @@ public class AsmUtils { return result; } + public static ClassNode removeJSRInstructions(ClassNode classNode) { + ClassNode result = new ClassNode(Opcodes.ASM8); + classNode.accept(new ClassVisitor(Opcodes.ASM8, result) { + @Override + public MethodVisitor visitMethod(int access, String name, String desc, String signature, + String[] exceptions) { + MethodVisitor mv = super.visitMethod(access, name, desc, signature, exceptions); + return new JSRInlinerAdapter(mv, access, name, desc, signature, exceptions); + } + }); + return result; + } + public static MethodNode removeLineNumbers(MethodNode methodNode) { MethodNode result = newMethodNode(methodNode); methodNode.accept(new MethodVisitor(Opcodes.ASM8, result) { diff --git a/core/src/main/java/com/taobao/arthas/core/advisor/Enhancer.java b/core/src/main/java/com/taobao/arthas/core/advisor/Enhancer.java index e4f445116..c84ed5a62 100644 --- a/core/src/main/java/com/taobao/arthas/core/advisor/Enhancer.java +++ b/core/src/main/java/com/taobao/arthas/core/advisor/Enhancer.java @@ -123,6 +123,8 @@ public class Enhancer implements ClassFileTransformer { } ClassNode classNode = AsmUtils.toClassNode(classfileBuffer); + // remove JSR https://github.com/alibaba/arthas/issues/1304 + classNode = AsmUtils.removeJSRInstructions(classNode); // 生成增强字节码 DefaultInterceptorClassParser defaultInterceptorClassParser = new DefaultInterceptorClassParser();