1

我正在尝试编写 Java 代码,该代码将遍历堆栈并不仅打印方法名称/行号,还打印作为参数传递给这些方法的值。我能够获取 Thread.getStackTrace() 返回的每个帧的 StackTraceElement 对象(http://docs.oracle.com/javase/7/docs/api/java/lang/StackTraceElement.html)(http:// /docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#getStackTrace%28%29),但是这个类没有公开我需要的细节。

是否有另一种访问堆栈帧/激活记录的方法,可以让我详细了解传递给每个方法的内容?

4

1 回答 1

3

如果您实现JPDA(调试器 API) ,您也许可以做到这一点,但我怀疑您是否想这样做。(除此之外,性能影响可能很大。)

据我所知,如果没有这种程度的侵入性,您将无法通过反射获得参数值(或特定堆栈帧中的任何其他局部变量值)。

很抱歉答案是否定的,但是如果没有那个或者你已经说过你不能使用的 AOP 之类的东西,你就不走运了。

于 2013-09-06T06:01:25.953 回答