executableUnit 探测片段使您能够为匹配探测目标和过滤规范、并且有源代码信息可用的方法,执行细粒度的数据收集。
在目标方法中的每个“可执行单元”之前插入对此类型的片段的调用。对于匹配探测目标和过滤器规范,却无源代码信息的方法,则将在该方法的开始处插入一次该片段。
executableUnit 片段可以使用除 returnedObject、exceptionObject、isFinally 和 thisObject 以外的所有其它数据项类型。最重要的是,它们可以使用 executableUnitNumber 数据项,该数据项包含要执行的可执行单元数。
方法中以及行表中的可执行单元数将不包含由 Probekit 插入到方法中的可执行单元。
可执行单元在每个基本块的开始处以及每个源代码行号与先前的字节代码不同的字节代码处开始。基本块是无法分出或分入的字节代码指令区域。当基本块中的第一个指令执行时,将执行所有这些指令,所以将这些指令看成是单个组。
基本块以 branch、call、throw 和 return 指令结束(在其它指令中)。
一些指令(例如“divide”)不认为是可执行单元的结束,虽然事实上它们可以抛出异常。这是可执行单元在技术上与基本块不相同的另一种形式。
如果 Java 方法没有任何相关联的源代码信息,则将认为整个方法只有一个可执行单元。