如何将插件的结果复制到另一个项目?

How to copy results of a plugin to another project?

在 Frama-C 中,我想将 Value 等插件的结果从一个项目复制到另一个项目。我该怎么做?我猜想我必须将 Project.copy 与正确的 State_selection 一起使用,但那对 Value 来说是什么?更一般地说,我如何确定给定插件的 State_selection 是什么?

不幸的是,没有跨插件的统一机制。对于 EVA1 插件,你可能会做类似

let selection = State_selection.with_codependencies Db.Value.self in
Project.copy ~selection ~src dest

为了捕获 EVA 的状态以及它所依赖的中间状态。

也就是说,我建议不要尝试复制 Frama-C 内部状态的如此重要的部分。它非常容易出错,并且意味着要使用奥术 API。如果您负担得起,另外两个解决方案似乎更简单:

  • 在原始项目中工作,结果可能会通过 File.create_copy_from_visitor.
  • 创建一个带有新 AST 的新项目
  • 使用 Project.copy 复制整个项目并处理新项目。

1: Evolved Value A解析,Value的新名称