代码之家  ›  专栏  ›  技术社区  ›  user3250354

使用Java类加载器获取堆栈跟踪

  •  0
  • user3250354  · 技术社区  · 8 年前

    我正试图找到一个简单问题的答案,但迄今为止运气不佳。

    问题是: can i use java class loader (implement a new class loader) to investigate the stack trace ?

    更准确地说,

    我正在谈论场景,在场景中我正在对一些代码运行测试,我想使用堆栈跟踪来确定哪个测试类运行此代码?(一种方法是查看堆栈跟踪中最近的测试)

    另一个先进的想法是使用类加载器,以便找到运行当前代码的最接近的“测试方法”。。

    编辑:

    我既不能访问运行代码的测试,也不能访问代码本身。这就是我考虑类加载器的原因。->我可以运行类加载器,但不能更改应用程序代码或应用程序测试代码..(这就是我不能使用Thread.getStackTrace()的原因)。

    1 回复  |  直到 8 年前
        1
  •  1
  •   nukie    8 年前

    要获取当前堆栈跟踪,可以使用 Thread.getAllStackTraces() 方法-它为您提供带有线程堆栈的Map对象。你可以参考这张地图 Thread.currentThread() 钥匙

    更新

    如果您需要监视主机/测试应用程序外部的堆栈跟踪,您只需使用 jstack util查找运行目标代码的特定线程。

    此外,您可以使用字节码跟踪工具,如 BTrace 。使用BTrace,您可以使用跟踪其他方法中的方法调用。请看一下这个 tutorial 我想你会对描述的部分特别感兴趣 @位置 参数用法 @OnMethod(打开方法) 注释。