ASM Java BCI,跟踪方法参数值/方法返回值

时间:2013-04-06 10:33:09

标签: java assembly

我正在使用ASM在我的Java程序中输入一些简单的跟踪指令,输入方法,退出方法,时间戳等......

这一切都很有效。

我现在想要扩充这个并注入捕获方法参数值和方法返回值的指令,使用ASM以一般方式应用于任何方法。

任何能够指出正确方向的代码示例都非常受欢迎。

1 个答案:

答案 0 :(得分:0)

ASM参数示例 参考(https://github.com/scouter-project/scouter/blob/master/scouter.agent.java/src/scouter/agent/asm/CapArgsASM.java

Type.getArgumentType(desc) // get arguments types. return Type[]
mv.visitVarInsn(Opcodes.ILOAD, index) // load parameter to stack

ASM返回示例 参考(https://github.com/scouter-project/scouter/blob/master/scouter.agent.java/src/scouter/agent/asm/CapReturnASM.java

public void visitInsn(int opcode) {
    if ((opcode >= IRETURN && opcode <= RETURN)) {
        //return value is on the top stack
    }
    mv.visitInsn(opcode);
}