【发布时间】:2013-07-25 04:05:07
【问题描述】:
我想查看方法调用的参数。所以如果我打电话给 foo:
x = 4;
y = 5;
...
foo(x, y, 20, 25);
我想打印参数(4,5,20,25) 我知道这些参数在调用方法之前被推入堆栈。如何从方法的局部变量数组中获取值(如果已初始化或为常量)?
visitVarInsn() 和 VarInsnNode 无法从数组中查找实际值。
我需要使用分析器和解释器来执行此操作,还是有更简单的方法?
编辑:想出了如何做到这一点。 我修改了 BasicValue 和 BasicInterpreter 以考虑字节码指令参数。 所以表示像 BIPUSH 这样的指令的值包含有关被推送的值的信息,而不仅仅是类型信息。 使用分析器以相同的方式检查帧
【问题讨论】:
-
你想解决什么问题?
-
您想在编译时(不运行程序)还是在运行时静态地找出参数? (第二个蜜蜂要容易得多)
-
我需要静态地找到它们。我只需要知道它们是否被初始化,以及初始值
标签: java bytecode java-bytecode-asm