监测GHC活动

Mat*_*hid 11 haskell ghc

如果GHC需要很长时间来编译某些东西,有没有办法找出它在做什么?

首先,我很高兴知道我是否真的崩溃了编译器(即,以某种方式将其置于某种无限循环中),或者它是否实际上正在取得进展,但速度非常慢.

其次,很高兴知道GHC编译过程的哪个部分遇到了麻烦.它是解析,desugaring,或类型检查,或核心优化,或代码生成,还是......?

有没有办法监控发生了什么?(请记住,如果GHC需要很长时间,这可能意味着它正在做很多工作,所以如果你要求太多的输出,它将是巨大的!)

GHC已经告诉你它正在尝试(重新)编译哪些模块.就我而言,问题是一个独立的模块.我想知道GHC陷入困境的地方.

Mat*_*hid 4

根据 Daniel Fischer 的评论,我尝试使用不同的详细选项运行 GHC。

  • -v1:产生了更多的输出,但在主要编译步骤中没有任何输出。
  • -v2:告诉您 GHC 当前正在执行什么步骤(解析器、脱糖、类型检查、简化器等)。这几乎就是我真正想要的。
  • -v3:似乎使简化器实际上将其正在执行的操作转储到控制台 - 编译 8MB 源代码时是个坏主意!

所以看来这-v2就是开始的地方。

(在引发这个问题的程序的具体情况下,GHC 似乎永远花在类型检查阶段。)