字节曼实现细节



我正在查看字节人的实现,以了解它们如何专门用于跟踪变量 AT/AFTER n 次读取、AT/AFTER n 次写入等情况。 在他们的实现中,他们读取一个类两次,一次用于检查它是否与用户使用 RuleCheckMethodAdapter 指定的规则匹配,第二次用于使用 RuleTriggerAdapter 在类中感兴趣的位置实际注入字节码(触发器(。 我无法理解的是为什么我们需要 2 次传递,为什么在第一次传递本身中,如果与规则匹配,我们不能添加触发器? 任何关于同一方面的见解都会有所帮助。

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

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

最新更新