0

我正在查看 byteman 实现,以了解它们如何专门用于跟踪变量 AT/AFTER nth read、AT/AFTER nth write 等情况。在他们的实现中,他们读取一个类两次以检查它是否与指定的规则匹配用户使用 RuleCheckMethodAdapter,第二次使用 RuleTriggerAdapter 在类中感兴趣的位置实际注入字节码(触发器)。我不明白的是为什么我们需要 2 次通过,为什么不能在第一次通过时,如果与规则匹配,我们可以添加触发器?对此的任何见解都会有所帮助。

4

1 回答 1

0

所有位置类型的所有注射阶段都使用两个通道。第一遍是一个验证步骤,确保该位置实际上与方法字节码中特定点的代码匹配。它记录允许对该位置进行适当注射所需的信息,并将其保存以供第二次通过使用。注意这第一阶段总是一个非常便宜和快速的代码扫描。

第二阶段跟踪更多关于代码结构、抽象机器堆栈布局和类型等的信息。这部分是为了确保它正确地进行注入,但它也必须做很多工作以确保它可以正确路由注入区域之外的异常。在明确该规则适用之前,没有必要产生这种开销。

于 2020-07-20T14:27:55.370 回答