【问题标题】:How to generate control flow graph from Scala code?如何从 Scala 代码生成控制流图?
【发布时间】:2015-05-31 18:48:46
【问题描述】:

我想看看 Scala 编译器生成的控制流图。有没有办法这样做?我尝试在线搜索,但只找到了适用于 Java 的 Eclipse 插件,例如 www.drgarbage.com 中的那个,但没有找到适用于 Scala 的插件。

谢谢

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

【问题讨论】:

  • 我相信Foo 是你的类,Foo$ 是伴生对象,但我不确定最后一个。
  • 你有具体的目标吗?

标签: eclipse scala compiler-construction control-flow-graph


【解决方案1】:

我没有意识到后端中 scala 的 IR(中间表示)实际上称为 icode。编译器中的选项 -Xprint-icode 实际上将 IR 显示为基本块。这就是我要找的。

【讨论】:

  • 从 scala 2.12 - see here 开始,此功能可能会被删除。更好的方法可能是编译器插件。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 2011-11-05
    • 2012-03-13
    • 2018-12-21
    相关资源
    最近更新 更多