executableUnit 探针段类型允许您为一些方法执行细粒度数据收集,这些方法符合探针的目标指定,并且提供了源代码信息。
对这种类型的段的调用被插入在目标方法的每个可执行单元之前。对于符合探针的目标指定但是没有源代码信息的方法,该段仅在方法的开头插入一次。
executableUnit 段可以使用除了 returnedObject、exceptionObject、isFinally 和 thisObject 之外的所有数据项类型。最重要的是,它可以使用 executableUnitNumber 数据项,该数据项包含将要运行的可执行单元的编号。
方法中和行表中的可执行单元的编号不包括由 Probekit 插入到方法中的可执行单元。
可执行单元从每个基本块的开头以及其源代码行号与前一个字节码不同的每个字节码开始。基本块是一定范围的字节码指令,既不能对它进行分支,也不能将它作为分支添加。当基本块中的第一条指令运行时,将执行所有指令,因此,这些指令被认为是单个组。
基本块以诸如 branch、call、throw 和 return 的指令结束。
尽管事实上某些指令(如 divide)可以抛出异常,但是不会将这些指令认为是可执行单元的结束。这是可执行单元与基本块在技术上的一个不同点。
如果 Java 方法没有任何相关联的源代码信息,则认为整个方法只有一个可执行单元。