haskell - 监测 GHC 事件

标签 haskell ghc

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

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

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

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

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

最佳答案

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

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

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

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

    关于haskell - 监测 GHC 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16348118/

    相关文章:

    haskell - 在 Haskell 中对 3 个参数进行柯里化(Currying)

    haskell - 需要帮助来理解 `liftBase` 的用法

    multithreading - 当 parent 在 GHC Haskell 中死亡时,子线程会发生什么?

    haskell - 我应该首先尝试学习哪些 GHC 类型系统扩展?

    performance - 为什么严格长度函数的执行速度明显更快?

    performance - 为什么差异列表比 Haskell 中的常规串联更有效?

    haskell - 我应该让我的 Haskell 模块默认安全吗?

    mysql - mysql-simple 执行中不需要 IO 字符串

    haskell - 类型签名需要库未导出的类型

    haskell - putStr 在来自 GHC、Mac OS X 的编译后的二进制文件中