文章内容

开发测试

覆盖率

覆盖率技术原理

https://wenku.baidu.com/view/ee03dc1858fafab069dc0296.html

插装原理及方法

字节码处理方式

JaCoCo通过注入来修改和生成java字节码,使用的是ASM库。我们知道JaCoCo是字节码注入方式,它是通过一个Probe探针的方式来注入的,探针是字节指令集插入到java方法中,程序执行后可以被记录,它不会改变原有代码的行为。
颜色的部分就是探针注入的地方。

JaCoCo是根据控制流Type来采用不同的探针插入策略的。

一个用java字节码定义的java方法的控制流图可能有以下的type,每一个type连接一个源指令与目标指令,type不同探针的注入策略也会不同,如下是type定义:
探针不改变该方法的行为,但记录他们已被执行的事实,从理论上讲,可以在控制流图的每一个边插入一个探针,作为探针实现本身需要多个字节码指令,这将增加几倍的类文件的大小和执行速度。事实上,只需要一个几个探头,根据每个方法的控制流的方法,下面说明了如何在不同的边缘类型的情况下添加额外的指令:

https://juejin.im/entry/57b2cea7a341310060feb804

0x2b aload_1 将第二个引用类型本地变量推送至栈顶
0x05 iconst_2 将int型2推送至栈顶
0x04 iconst_1 将int型1推送至栈顶
从操作数栈存存储到数组:bastore

https://www.jacoco.org/jacoco/trunk/doc/flow.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容