【发布时间】:2011-06-24 00:53:49
【问题描述】:
在java中,可以获取调用当前方法的类和方法(获取StackTrace的方法)。
我的问题是,我可以获取传递给调用此方法的方法的参数吗?
我需要这个来进行调试。
例如:
baseClass {
initialFunc(input) {
var modifiedInput = input + " I modified you";
otherClass.doSomething(modifiedInput);
}
}
otherClass {
doSomething(input) {
//GET THE ARGUMENTS PASSED TO THE METHOD OF THE CLASS THAT CALLED THIS METHOD
}
}
可以从堆栈跟踪中获取此信息,还是有其他方法?
(请注意,我需要能够在运行时执行此操作,并且不能实际更改 baseClass 的来源,这将是我的调试类的一个功能,事先不知道来源)
谢谢。
【问题讨论】:
-
如果您附加调试器,您可以,否则 - 不。参数可能在 CPU 寄存器中(不在堆栈上)
-
恐怕我无法为我的目的附加调试器
-
那么你就迷路了,除了 ClassLoader 和动态增强类来捕获参数。 (但你不会问你是否知道)
-
如果调试器可以做到,那么它一定是有可能的。 AFAIK,调试器不使用代码检测等,因为它可以附加到任何 Java 进程。不知道这是如何工作的,也许是一些 JMX?
-
@bestsss,这让我想到了一个后续问题:stackoverflow.com/questions/4945358/… - 我接受了这个问题。
标签: java debugging arguments stack-trace inflection