1

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

这一切都很好。

我现在想扩充它并注入指令来捕获方法参数值和方法返回值,使用 ASM 以一种可以普遍应用于任何方法的方式。

非常感谢任何可以为我指明正确方向的代码示例。

4

1 回答 1

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);
}
于 2016-01-19T02:17:50.700 回答