使用 Java class 加载程序获取堆栈跟踪

Using Java class loader to get stack trace

我正在尝试为一个简单的问题找到答案,但到目前为止运气不好。

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

更准确地说,

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

另一个先进的想法,是使用 class 加载程序来找到最接近 "test Method" 的 运行 当前代码..

编辑:

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

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

更新

如果您需要在 host/test 应用程序之外查看堆栈跟踪,您可以简单地使用 jstack util 找出特定线程是什么 运行目标代码。

此外,您还可以使用像 BTrace. With BTrace you can track methods invocation from within other methods using. Please have a look at this tutorial 这样的字节码跟踪工具。我认为您会对描述 @Location 参数使用 @OnMethod 注释的部分特别感兴趣。