ASM Java方法的介绍

时间:2018-07-26 08:45:22

标签: java code-coverage bytecode instrumentation java-bytecode-asm

您好,谢谢您的答复。我想知道是否有任何方式(使用ASM)实时了解我经历了哪些行,哪些我还没有。换句话说,一种方法,在任何方法完成执行后,对于每次执行,我都可以注入一个检测指令以供其打印已通过或未经过的行

1 个答案:

答案 0 :(得分:0)

首先,您应该使用静态方法创建一个类,该类记录行号执行事件。它将具有这样的方法:

public static void lineExecution(String filename, int lineNumber)

根据需要输入任何逻辑。在内存中捕获事件并在最后报告,或者只是将其写入stdout。

使用ASM修改目标类时,需要在visitSource中修饰ClassVisitor方法。

此方法应捕获“ source”参数(源文件)以供以后使用。然后,您需要从visitMethod返回带有修饰的visitLineNumber方法的自定义MethodVisitor。此方法应插入对您的静态方法的调用:

ldc (whatever the value of "source" is)
ldc (whatever line number was passed in)
invokestatic LineExecutionMonitor.lineExecution

因此,每当执行新的行号时,发生的第一件事就是对您的静态方法进行了调用。在那里,您可以在检测的类中跟踪执行。

希望这会有所帮助。