【问题标题】:Editing stacktrace after instrumentation检测后编辑堆栈跟踪
【发布时间】:2018-09-13 21:41:02
【问题描述】:

我有一个执行一些代码检测的 javaagent。 这当然会改变用户的堆栈跟踪,无论何时执行:

new Exception().printStackTrace()

而且它还会影响 Throwable.class 提供的其他服务:

getStackDepth()
getStackElement(int i)

等等……

在某些情况下,我的检测涉及添加新方法。该方法有一个非常独特的前缀,如果可能的话,我想忽略它。

JVMTI 是否以任何方式支持?

或者我是否需要检测使用代理的实际 Java 开发人员可以获得堆栈跟踪/堆栈元素/堆栈深度/等的所有方式...

【问题讨论】:

    标签: java jvmti


    【解决方案1】:

    首先,您使用的是哪种 Java?

    请检查有关...的文档 StackTrace & GetMethodName

    并检查您是否可以使用它来查看 getMethodName 是否返回您使用的前缀

    char * request = (*jvmti)->GetMethodName
        if (strstr(request, "PREFIX") != NULL) {
            // contains
        }
    

    【讨论】:

    • Java 8。是的。它确实使用了前缀。
    猜你喜欢
    • 2011-10-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2011-05-25
    • 2011-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多