Jacoco
文章平均质量分 72
a small bird
我是一只小小小小鸟~
展开
-
Jacoco生命周期
最近看Jacoco源码并进行修改来实现增量覆盖率的功能,Jacoco的插桩使用分为on-the-fly和offline两种方式:on-the-fly:通过在程序运行时指定javaagent,运行产出只包含覆盖率的结果Jacoco.exec,对原始jar不做修改。 offline:通过修改字节码生成插桩后的字节码,然后执行插桩后的字节码运行,同样产出覆盖率文件Jacoco.exec。通过maven插件均可以应用on-the-fly和offline两种模式。offline模式 <..原创 2021-08-14 10:02:16 · 645 阅读 · 0 评论 -
Jacoco Java方法控制流分析
Jacoco基于编译后的字节码来分析方法控制流,分析指令覆盖率和分支覆盖率时需要控制流信息。Java字节码控制流图:public static void example() { a(); if (cond()) { b(); } else { c(); } d();}public static example()V INVOKESTATIC a()V INVOKESTATIC cond()Z翻译 2020-08-28 22:26:56 · 637 阅读 · 0 评论 -
Jacoco实现原理
覆盖率分析机制覆盖率信息必须在运行时收集,Jacoco on-the-fly 模式通过jacoco agent在类加载时对原始类进行插桩,得到插桩后的类。收集覆盖率信息有几种方法,没有方法有几种不同的实现机制,橙色部分为Jacoco on-the-fly收集方式字节码插桩非常快,通过纯java实现,并且可以在任意java 虚拟机上运行。On-the-fly插桩模式通过为java虚拟机添加Java agent hook实现,不用改变目标应用程序。Java agent hook需要Jvm 1.5版本以翻译 2020-08-15 23:38:09 · 4814 阅读 · 0 评论 -
Jacoco 类标识符
jacoco在统计覆盖率时通过类标识符(class id)来标识一个类,接下来我们了解下Jacoco类标识符什么是类标识符,它们是如何创建的类标识符是一个64位整数,例如0x638e104737889183,是通过计算原始的class文件的CRC64产生的。类标识符有什么用类标识符用于识别Java类,在被加载的类运行时产生并存储在*.exec文件中,在分析的时候,比如在报告产生的时候,会通过类标识符把待分析的类和执行数据关联起来。Jacoco类标识符的优点及缺点优点:当服务部署了不同版本的应用,翻译 2020-08-14 18:38:32 · 754 阅读 · 0 评论