From 9b8cbf3f8ca9809fa8bf5816c6f6350e288e91ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E5=90=89?= <983433479@qq.com> Date: Tue, 10 Aug 2021 00:38:49 +0800 Subject: [PATCH] fix vmtool find clasloader error with hashcode(#1885) --- .../core/command/monitor200/VmToolCommand.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/com/taobao/arthas/core/command/monitor200/VmToolCommand.java b/core/src/main/java/com/taobao/arthas/core/command/monitor200/VmToolCommand.java index 0a8669b56..4dd89297c 100644 --- a/core/src/main/java/com/taobao/arthas/core/command/monitor200/VmToolCommand.java +++ b/core/src/main/java/com/taobao/arthas/core/command/monitor200/VmToolCommand.java @@ -163,8 +163,14 @@ public class VmToolCommand extends AnnotatedCommand { process.end(-1, "The className option cannot be empty!"); return; } - ClassLoader classLoader = ClassLoader.getSystemClassLoader(); - if (hashCode == null && classLoaderClass != null) { + ClassLoader classLoader = null; + if (hashCode != null) { + classLoader = ClassLoaderUtils.getClassLoader(inst, hashCode); + if (classLoader == null) { + process.end(-1, "Can not find classloader with hashCode: " + hashCode + "."); + return; + } + }else if ( classLoaderClass != null) { List matchedClassLoaders = ClassLoaderUtils.getClassLoaderByClassName(inst, classLoaderClass); if (matchedClassLoaders.size() == 1) { @@ -183,6 +189,8 @@ public class VmToolCommand extends AnnotatedCommand { process.end(-1, "Can not find classloader by class name: " + classLoaderClass + "."); return; } + }else { + classLoader = ClassLoader.getSystemClassLoader(); } List> matchedClasses = new ArrayList>(