Редактирование трассировки стека после инструментовки

У меня есть 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
    }
Другие вопросы по тегам