问题 在Scala和SBT中调试长编译时间


在我的Scala / SBT项目中,我有一个文件,最多需要5(!)分钟才能编译。所有其他的都可以在几秒钟内编译。这使得开发非常痛苦。

我确定我在滥用一些Scala结构,但我不知道如何调试它。如何在Scala中调试长编译时间?

我正在使用Scala 2.9.2和SBT 0.11.2


2679
2017-10-16 17:56


起源

编译时间长可能有很多原因。没有发布代码,我怀疑你会得到很多帮助。第一步可能是将文件拆分成几个,看看哪些部分需要花费最长的时间来编译。这也有助于_re_compilation时间。 - Kim Stebel
我不能在不重构大量代码的情况下拆分文件,因为它只包含一个类。我更感兴趣的是看看是否有一些我可以在编译器中打开的标志,可以给我更多关于问题所在的提示。 - Eyal
很公平,但您可以将类拆分为特征而不触及其余代码。 - Kim Stebel


答案:


您可以尝试以下Scala编译器选项:

  • -Ystatistics                   打印编译统计

找到花费最多时间的阶段。然后,试试那些:

  • -Xprint:<phase>                打印出程序或“全部”
  • -Yshow-trees                   与-print:phase一起使用时显示详细的树
  • -Ydebug                        输出调试消息
  • -Ypmat-debug                   跟踪所有模式匹配器活动。

要直接从sbt控制台启用这些设置,您可以使用 set scalacOptions in ThisBuild += "-Ystatistics",或不止一个, set scalacOptions in ThisBuild ++= Seq("-Yshow-trees", "-Ydebug)


11
2017-10-17 12:20