我有一个执行代码插装的javaagent。这当然会在用户执行以下操作时更改堆栈跟踪:
new Exception().printStackTrace()
它还会影响Throwable.class提供的其他服务:
getStackDepth()
getStackElement(int i)
等等。
在某些情况下,我的插装需要添加一个新方法。该方法有一个非常独特的前缀,如果可能的话,我想忽略它。
JVMTI是否以任何方式支持这一点?
或者我需要检测使用代理的实际java开发人员可以获得stacktrace /stackelement/ stackdepth /等的所有方法……
发布于 2018-09-14 08:35:26
首先,您使用的是哪种Java?
请查看有关... StackTrace & GetMethodName的文档
并检查是否可以使用此命令查看getMethodName是否返回您使用的前缀
char * request = (*jvmti)->GetMethodName
if (strstr(request, "PREFIX") != NULL) {
// contains
}
https://stackoverflow.com/questions/52322170
复制相似问题