是否可以访问java线程';运行时数据区域中的堆栈帧?

是否可以访问java线程';运行时数据区域中的堆栈帧?,java,debugging,jvm,stack-trace,Java,Debugging,Jvm,Stack Trace,我们可以使用Thread.currentThread().getStackTrace()来获取当前stackTrace。但是StackTraceeElement只包含少数信息,例如类名、方法名、行号等,这些信息只是静态信息。我想要更多的运行时数据。我想访问存储在当前线程堆栈框架中的方法参数值。这可能吗?非常感谢 为这个问题添加一些背景知识。我试图在捕获异常时打印每个堆栈帧的方法参数值(即stackTrace中的每个堆栈帧)。 这可能吗?我读过关于java虚拟机的文章,当函数返回时(正常情况下或异

我们可以使用Thread.currentThread().getStackTrace()来获取当前stackTrace。但是StackTraceeElement只包含少数信息,例如类名、方法名、行号等,这些信息只是静态信息。我想要更多的运行时数据。我想访问存储在当前线程堆栈框架中的方法参数值。这可能吗?非常感谢

为这个问题添加一些背景知识。我试图在捕获异常时打印每个堆栈帧的方法参数值(即stackTrace中的每个堆栈帧)。 这可能吗?我读过关于java虚拟机的文章,当函数返回时(正常情况下或异常情况下突然完成),当前堆栈帧将弹出。所以我认为即使有可能访问堆栈帧,我们也只能访问那些堆栈帧仍在堆栈中的。我说得对吗


AOP可以解决这个问题。有了AOP,我可以做一些代码注入来保存每个方法的参数值。当发生异常时,我可以查找保存的信息。但是我认为这可能不是关于性能问题的最佳解决方案。

java中的堆栈帧可以使用java调试体系结构访问,这意味着您可以使用调试器。尽管您的需求可能会带来安全威胁,因为您希望访问其范围之外的方法参数

如果您确实希望它在运行时打印,而不是在调试器中打印,我可以想到的一种方法是更好地创建一个bean信息,并将单个方法的所有信息设置到其中。您可以跨方法将它们存储在有序集合中,并在异常时打印它们

AOP也很好


但是,这一切似乎都太多了,无法取得如此小的成就。可能更清楚地说明您的目的会有所帮助。

不直接,不,这将是一种安全风险。不过,您可以使用调试器和JVM代理。“你想干什么?”克丽丽丝,我补充了一些我问题的背景知识。谢谢你的回答。