ASM 方法的覆盖 Java

Coverture of a method ASM Java

您好,提前感谢您的回答。我想知道是否有任何方法可以实时了解(使用 ASM)我已经通过了哪些线路,哪些还没有。换句话说,一旦任何方法执行完毕,我就可以为每次执行注入一个检测指令,以打印它已经或未通过的行

首先,您应该创建一个 class,其中包含一个记录行号执行事件的静态方法。它会有这样的方法:

public static void lineExecution(String filename, int lineNumber)

输入任何你需要的逻辑。在内存中捕获事件并在最后报告,或者将其写入标准输出。

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

此方法应捕获 "source" 参数(源文件)以备后用。然后,您需要 return 来自 visitMethod 的自定义 MethodVisitor 以及经过修饰的 visitLineNumber 方法。此方法应插入对静态方法的调用:

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

因此,每当执行新的行号时,首先发生的事情就是调用您的静态方法。您可以在 class.

中跟踪执行情况

希望对您有所帮助。