#java #debugging #jvmti #jdi
#java #отладка #jvmti #jdi
Вопрос:
Я могу получить все интерфейсы ClassType
с allInterfaces()
помощью, но это приводит ко многим вызовам JDWP для debuggee, которые выполняются медленно. Другим подходом было бы проверить это:
Collection.class.isAssignableFrom(classType)
но метод isAssignableFrom()
находится в java.lang.Class
, и поэтому я должен вызвать этот метод с invokeMethod
таким образом:
javaLangClassReference.invokeMethod(threadRef, isAssignableFromMethod,
Arrays.asList(myClassType),
ObjectReference.INVOKE_SINGLE_THREADED);
Но здесь есть две проблемы:
classType
не может использоваться в качестве параметра для вызова метода, это неValue
- Как мне предоставить
java.util.Collection
в качестве параметра Методу(Arrays.asList(myClassType, ...))
?
Кроме того, есть ли более простой способ проверить, является ли данное ClassType
java.util.Collection
?
Комментарии:
1. IsAssignableFrom находится в java.lang. Класс. Этого нет в java.lang. Объект.
2. @rzwitserloot, ты прав, это была моя ошибка. Обновлено.
3. Вы можете использовать
classObject()
для преобразованияReferenceType
в соответствующийObjectReference
/Value
.4. @Holger, спасибо, так что тогда у меня будет
javaUtilCollectionRef.classObject()
, и тогда я просто вызовуjavaUtilCollectionRef.classObject().invokeMethod(...,Arrays.asList(myClassRef.classObject()),...)
, это правильно?5. Кажется, это единственный способ