2017-02-13 8 views
0

Я пишу настраиваемый отладчик для JVM с использованием интерфейсов интерфейса JVMTI, и мне нужно получить имя класса, в котором объявлен метод, я получаю метод идентификатор метода с использованием error = (*jvmti)->GetMethodName(jvmti,frames[i].method,&methodName,NULL,NULL); и я пытаюсь получить имя класса с помощью error = (*jvmti)->GetMethodDeclaringClass(jvmti,frames[i].method,&declaring_class_ptr);Как получить класс, в котором объявлен метод с использованием jmethod id через интерфейс JVMTI

это возвращает ссылку JClass в declaring_class_ptr, мой вопрос в том, как преобразовать это в строку, содержащую имя класса?

+0

отладчик записываемого в C – kumarD

+0

жалком удаление тега – kumarD

+0

Я получил его для вас ':') –

ответ

1

Чтобы получить имя класса вы должны использовать GetClassSignature, что-то вроде:

char* name; 
jvmti->GetClassSignature(class, &name, NULL); 
trace(jvmti, "Class prepared: %s", fix_class_name(name)); 
jvmti->Deallocate((unsigned char*)name); 
+0

Мне нужно получить локальные переменные внутри метода и класса и их соответствующие значения при вызове этого метода, есть ли способ сделать это, используя сам JVMTI? Спасибо – kumarD

+0

Я не уверен. Взгляните сюда, возможно, это поможет вам немного: http://stackoverflow.com/questions/7041177/jvmti-how-to-get-the-value-of-a-method-parameter-from-callback – yakobom