【问题标题】:Using Java class loader to get stack trace使用 Java 类加载器获取堆栈跟踪
【发布时间】:2016-03-22 08:16:38
【问题描述】:

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

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

更准确地说,

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

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

编辑:

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

【问题讨论】:

  • 很难理解你在问什么。您是在问如何确定一段代码属于哪个类?
  • 正常的堆栈跟踪应该已经告诉你被调用的方法链
  • 看看stackoverflow.com/questions/1069066/…,这是在运行时获取堆栈跟踪的一种方法。
  • 我不想让它做其他事情,我想在测试类和它测试的代码之间建立联系。我希望使用类加载器会有所帮助我和那个..
  • 类加载器负责类元数据上传,而不是任何类型的分析或检测。请参考我的更新答案。

标签: java classloader javaagents


【解决方案1】:

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

更新

如果您需要在主机/测试应用程序之外查看堆栈跟踪,您可以简单地使用 jstack 工具来找出运行目标代码的特定线程。

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

【讨论】:

    猜你喜欢
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多