我有一个执行一些代码检测的javaagent。 当然,每当用户执行以下操作时,这都会更改用户的堆栈跟踪:
new Exception().printStackTrace()
它还会影响其他服务 Throwable.class提供:
getStackDepth()
getStackElement(int i)
等。。。
在某些情况下,我的检测涉及添加新方法。该方法有一个非常独特的前缀,如果可能的话,我想忽略它。
JVMTI是否以任何方式支持这一点?
或者我是否需要检测使用代理的实际 Java 开发人员可以获得堆栈跟踪/堆栈元素/堆栈深度/等的所有方式......
首先,你使用的是哪个Java?
请检查有关... 堆栈跟踪 & 获取方法名称
并检查是否可以使用它来查看 getMethodName 是否返回您使用的前缀
char * request = (*jvmti)->GetMethodName
if (strstr(request, "PREFIX") != NULL) {
// contains
}