入口
org.jacoco.agent.rt.internal.PreMain
/**
* This method is called by the JVM to initialize Java agents.
*
* @param options
* agent options
* @param inst
* instrumentation callback provided by the JVM
* @throws Exception
* in case initialization fails
*/
public static void premain(final String options, final Instrumentation inst)
throws Exception {
// 从命令行参数中获取k-v参数
final AgentOptions agentOptions = new AgentOptions(options);
// 创建agent对象 用来管理runtime生命周期
final Agent agent = Agent.getInstance(agentOptions);
// 在运行阶段收集执行信息
final IRuntime runtime = createRuntime(inst);
runtime.startup(agent.getData());
//注册CoverageTransformer
inst.addTransformer(new CoverageTransformer(runtime, agentOptions,
IExceptionLogger.SYSTEM_ERR));
}
注册了CoverageTransformer之后,在class加载时,字节码会被此类修改,处理分为:label对象标记,探针植入,生成探针数组。后面的文章进行分析。

本文深入探讨JaCoCo的运行机制,从PreMain入口开始,讲解了如何注册CoverageTransformer以实现字节码修改进行插桩。重点解析了Agent的功能,包括初始化RuntimeData用于存储覆盖率数据,根据参数创建IAgentOutput以传递数据,以及创建IRuntime对象并启动。文章还概述了启动JaCoCo时涉及的三个关键步骤:初始化RuntimeData、设置IAgentOutput和执行插桩。

4083

被折叠的 条评论
为什么被折叠?



