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

时间:2016-03-22 08:16:39

标签: java classloader javaagents

我试图找到一个简单问题的答案,到目前为止没有运气。

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

更确切地说,

我说的是我正在运行某些代码测试的scenerio,我想使用堆栈跟踪来确定哪些测试类运行此代码? (一种方法是查看堆栈跟踪中最接近的测试)

另一个先进的想法,就是使用类加载器来找到最接近的"测试方法"运行当前代码..

编辑:

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

1 个答案:

答案 0 :(得分:1)

要获取当前堆栈跟踪,您可以使用Thread.getAllStackTraces()方法 - 它为您提供带有线程堆栈的Map对象。您可以使用Thread.currentThread()键来引用此地图。

更新

如果您需要在主机/测试应用程序之外观察堆栈跟踪,您只需使用 jstack util来找出运行目标代码的特定线程。

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