From 4afedf89e1d461c1a6774e3c1dc83953108f39cc Mon Sep 17 00:00:00 2001 From: hengyunabc Date: Wed, 20 May 2020 14:45:51 +0800 Subject: [PATCH] check classloader before enhance --- .../java/com/taobao/arthas/core/advisor/Enhancer.java | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 8a0becfd4..8f6e6c1cc 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 @@ -183,6 +183,17 @@ public class Enhancer implements ClassFileTransformer { public byte[] transform(final ClassLoader inClassLoader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException { try { + // 检查classloader能否加载到 SpyAPI,如果不能,则放弃增强 + try { + if (inClassLoader != null) { + inClassLoader.loadClass(SpyAPI.class.getName()); + } + } catch (Throwable e) { + logger.error("the classloader can not load SpyAPI, ignore it. classloader: {}, className: {}", + inClassLoader.getName(), className); + return null; + } + // 这里要再次过滤一次,为啥?因为在transform的过程中,有可能还会再诞生新的类 // 所以需要将之前需要转换的类集合传递下来,再次进行判断 if (!matchingClasses.contains(classBeingRedefined)) {