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