如果GHC需要很长时间来编译某些东西,有没有办法找出它在做什么?
首先,我很高兴知道我是否实际上已经崩溃了编译器(即,以某种方式将其置于某种无限循环中),或者它是否实际上正在取得进展,但只是非常缓慢。
其次,很高兴知道GHC在编译过程的哪个部分遇到了麻烦。它是解析,或者脱离,或类型检查,或者核心优化,还是代码生成,还是......?
有没有办法监控正在发生的事情? (请记住,如果GHC花费很长时间,这可能意味着它正在做很多工作,所以如果你要求太多的输出它将会是巨大的!)
GHC已经告诉你它正在尝试(重新)编译哪些模块。就我而言,问题是一个独立的模块。我想知道GHC卡在哪里。
答案 0 :(得分:4)
根据Daniel Fischer的评论,我尝试使用不同的详细选项来运行GHC。
-v1
:产生了更多输出,但在主编译步骤中没有任何内容。-v2
:告诉你GHC目前正在做什么步骤(解析器,desugar,类型检查,简化器等)。这几乎就是我真正想要的。-v3
:似乎使简化器实际上将它正在做的事情转储到控制台 - 编译8MB源代码时的坏主意!所以似乎-v2
是开始的地方。
(在提出这个问题的程序的特定情况下,似乎GHC在类型检查阶段永远花费。)