如何从 Scala 代码生成控制流图?

How to generate control flow graph from Scala code?

我想看看Scala编译器生成的控制流图。有办法吗?我尝试在线搜索,但只找到了 Java 的 Eclipse 插件,就像这里的插件 www.drgarbage.com 但 none 的 Scala。

谢谢

编辑:我获取了由 scalac 生成的 .class 文件并使用 dr garbage 插件打开它以查看可视化为控制流图的字节码。但是 scalac 生成了 3 个不同的 .class 文件:Foo、Foo$ 和 Foo$delayedInit$body。我看到一堆断开连接的图表,而 Foo$ 中只有一个图表看起来合理。我尝试在线搜索 3 个 .class 文件之间的区别,但找不到任何内容。

没想到后端scala的IR(中间表示)其实叫icode。编译器中的选项 -Xprint-icode 实际上显示了 IR 被分成基本块。这就是我要找的。

编译器插件可以做到这一点。但是,它需要抽象掉编译器引入的一些内部结构——这些内部结构比您对项目源代码的外观所期望的更具体。您可以使用 this plugin 来获取为您提取的原始信息,而从原始数据中重新抽象仍在进行中,您必须 sbt publishLocal 才能包含此信息在你的 sbt 定义中添加插件。