11

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

首先,很高兴知道我是否真的使编译器崩溃(即,以某种方式将其放入某种无限循环),或者它是否真的在取得进展,但只是非常缓慢。

其次,最好知道 GHC 在编译过程的哪个部分遇到了问题。是解析、脱糖、类型检查、核心优化、代码生成,还是......?

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

GHC 已经告诉您它正在尝试(重新)编译哪些模块。就我而言,问题是一个独立的模块。我想知道 GHC 在哪里卡住了。

4

1 回答 1

4

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

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

所以这似乎-v2是开始的地方。

(在提示这个问题的程序的特定情况下,GHC 似乎永远花费在类型检查阶段。)

于 2013-05-04T08:12:30.580 回答