Редактирование трассировки стека после инструментовки
У меня есть javaagent, который выполняет некоторые инструменты кода. Это, конечно, меняет трассировку стека для пользователя всякий раз, когда он выполняет:
new Exception().printStackTrace()
И это также влияет на другие службы, предоставляемые Throwable.class:
getStackDepth()
getStackElement(int i)
Так далее...
Мой инструментарий включает в себя добавление нового метода в некоторых случаях. У метода очень уникальный префикс, и я хотел бы игнорировать его, если это возможно.
Это каким-либо образом поддерживается JVMTI?
Или мне нужно использовать все способы, которыми фактический разработчик Java, использующий агент, может получить stacktrace / stackelements / stackdepth / etc...
1 ответ
Прежде всего, какую Java вы используете?
Пожалуйста, проверьте эту документацию о... StackTrace& GetMethodName
и проверьте, можете ли вы использовать это, чтобы увидеть, возвращает ли getMethodName префикс, который вы используете
char * request = (*jvmti)->GetMethodName
if (strstr(request, "PREFIX") != NULL) {
// contains
}