Jacoco
JavaEdge.
关注并私信我,获取更多大厂求职经验。《编程严选网》创始人
展开
-
Java代码覆盖率框架JaCoCo的core-instr core.internal.instr 包类源码解析
对类的植入锁定进行判断几个可以对覆盖率跟踪的Java类定义进行instrument的APIpublic byte[] instrument(final ClassReader reader) { final ClassWriter writer = new ClassWriter(reader, 0) { @Override protected String getCommon...原创 2020-04-04 19:37:08 · 2461 阅读 · 1 评论 -
jacoco core.runtime包源码分析
1 IExecutionDataAccessorGenerator被 instrument 的类需要一段代码,该代码从运行时获取 boolean[]实例。该机制是针对于运行时的,因此由该接口抽象。 实现由 IRuntime 实现提供,并由 instrumentation process过程使用。唯一方法 /** * 此方法生成获得具有给定id的类的coverage数据结构所需的字节码...原创 2020-04-03 17:15:17 · 2136 阅读 · 0 评论 -
ASM - TreeApi Method组件和接口简介
ASM的TreeApi对于Method的转换、生成也提供了一系列的组件和接口。MethodNode中大多数属性和方法都和ClassNode类似,其中最主要的属性就是InsnList了。InsnList是一个双向链表对象,包含了存储方法的字节指令序。先来看下InsnList中的主要是属性和方法。Java代码publicclassInsnList{//publi...原创 2020-04-03 10:00:20 · 2005 阅读 · 0 评论 -
ASM 关键接口 MethodVisitor
当ASM的ClassReader读取到Method时就转入MethodVisitor接口处理。方法的定义,以及方法中指令的定义都会通过MethodVisitor接口通知给程序。我们假设有下面这样的一个类:下面是这个MethodVisitor接口的所有方法定义。本文只会介绍主要的方法,因此不会逐个对方法做依次介绍:这些方法必须按照以下顺序调用(和MethodVisitor接口在Javadoc...原创 2020-04-02 17:44:51 · 6508 阅读 · 0 评论 -
设计模式实战-访问者设计模式(Visitor)
1 简介1.1 定义封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些数据元素的新的操作思想将数据结构和数据操作分离目的稳定的数据结构和易变的操作的解耦适用场景假如一个对象中存在着一些与本对象不相干(或者关系较弱)的操作,可以使用访问者模式把这些操作封装到访问者中去,这样便避免了这些不相干的操作污染这个对象。假如一组对象中,存在着相似的操作,可...原创 2020-04-02 14:04:46 · 2044 阅读 · 1 评论 -
ASM 库的 classVisitor 类解析
定义在读取Class字节码时会触发的事件,如类头解析完成、注解解析、字段解析、方法解析等。该类用于访问Java类的所有元素,是一个抽象类。子类实现其方法后可以完成对已编译类的读写。package org.objectweb.asm;public abstract class ClassVisitor { // 实现的ASM的API版本。该字段的值必须为如下几个之一:Opcodes.AS...原创 2020-04-02 11:43:48 · 3835 阅读 · 0 评论 -
JaCoCo core.internal.flow包源码
jacoco有对类级别,方法级别,逻辑分支级别以及代码行级别做了专门的处理封装。具体的封装类在internal.analysis.flowIFrame 接口import org.objectweb.asm.MethodVisitor;/** * 当前的 stackmap frame 内容的表示 */public interface IFrame { /** * 向给定的访问者...原创 2020-04-01 20:20:53 · 1854 阅读 · 1 评论 -
JVM的StackMapTable的前世今生
在Java 6版本之后JVM在class文件中引入了栈图(StackMapTable)。作用为了提高JVM在类型检查的验证过程的效率栈图结构位于Code属性(指Classfile的Code属性)的属性表( attributes table)结构中。在字节码的Code属性中最多包含一个StackMapTable属性。在Java 7版本之后把栈图作为字节码文件中的强制部分。 本来程序员是不...原创 2020-04-01 16:34:01 · 2452 阅读 · 0 评论 -
Java字节码修改库ASM#ClassReader实现原理及源码分析
1 概述ASM是Java中比较流行的用来读写字节码的类库,用来基于字节码层面对代码进行分析和转换。在读写的过程中可以加入自定义的逻辑以增强或修改原来已编译好的字节码,比如CGLIB用它来实现动态代理。ASM被设计用于在运行时对Java类进行生成和转换,当然也包括离线处理。ASM短小精悍、且速度很快,从而避免在运行时动态生成字节码或转换时对程序速度的影响,又因为它体积小巧,可以在很多内存受限的环...原创 2020-03-31 22:34:04 · 2828 阅读 · 2 评论 -
JaCoCo官方教程
1 概念1.1 任务 - MissionJaCoCo应该为基于Java VM的环境中的代码覆盖率分析提供标准技术。重点是提供一个轻量级,灵活且文档齐全的库,以与各种构建和开发工具集成。有几种适用于Java的开源覆盖技术。在实现Eclipse插件EclEmma时,观察到它们都不是真正为集成而设计的。它们中的大多数特别适合特定工具(Ant任务,命令行,IDE插件),并且不提供允许在不同上下文...原创 2020-03-31 17:10:38 · 11968 阅读 · 3 评论 -
Java面试快问快答-Instrument机制
Java Instrument有什么作用?使开发者可以构建一个独立于应用程序的代理程序Agent,用来监控和协助运行在JVM上的程序,更重要的是能够替换和修改某些类的定义;最大的作用:可以实现一种虚拟机级别支持的AOP实现方式;在JDK 1.5 、1.6中,Java Instrument做了哪些变动支持?JDK 1.5:支持静态Instrument,就是在JVM启动前静态设置Instru...原创 2020-03-30 17:25:34 · 2241 阅读 · 3 评论 -
JaCoCo 与Cobertura 的对比
0 二者总体功能对比详细对比http://openclover.org/doc/manual/latest/general–comparison-of-code-coverage-tools.html#Comparisonofcodecoveragetools-legend1 数据结构对比1.1 UML 图coberturanet.sourceforge.cobertura.c...原创 2020-03-27 18:11:30 · 4192 阅读 · 0 评论 -
谈谈Java Intrumentation和相关应用
1 Overview 对于Java 程序员来说,Java Intrumentation、Java agent这些技术可能平时接触的很少,听上去陌生但又好像在哪里见到过。实际上,我们日常应用的各种工具中,有很多都是基于他们实现的,例如常见的热部署(JRebel, spring-loaded)、各种线上诊断工具(btrace, Greys)、代码覆盖率工具(JaCoCo)等等。 本文会介绍 ...转载 2020-03-25 21:28:01 · 2538 阅读 · 1 评论 -
JaCoCo探针策略原理及案例总结
1 探针策略在一系列字节码指令中插入这些属性呢,只要该属性被执行了,说明其之前的指令都被执行了注意方法结束了是在 return 指令前放置探针哦跳转语句的记录条件语句2 探针特点探测的唯一目的是记录它至少执行过一次。探测器不记录它被调用的次数或收集任何时间信息。后者超出了代码覆盖率分析的范围,更多的是在性能分析工具的目标中最小的运行时间开销对应用程序代码无副作用线程...原创 2020-03-23 21:04:46 · 4934 阅读 · 11 评论 -
Jacoco探针源码解析(0.8.5 版本)
目录jacoco agent入口类classFileDumper 类InstrSupport类assertNotInstrumentedpushClassAnalyzer调用ClassInstrumenterinstrumenter - 对类的植入锁定进行判断loadclass入口类:CoverageTransformerClassprobesAdapter类核心代码:MethodVisitor...原创 2020-03-20 20:37:53 · 4900 阅读 · 0 评论