【发布时间】:2014-02-25 15:08:07
【问题描述】:
我编写了一个 Haskell 程序,该程序在列表上执行二进制搜索。至少我是这么认为的。当我使用ghc v7.6.3 编译程序并运行程序时,我得到以下输出:
progname: <<loop>>
这个输出到底是什么意思?这是否意味着我有一个无限循环,ghc 优化了?我应该如何调试这个?
【问题讨论】:
-
你知道 ghci 调试器吗?您还可以重新利用 HPC 来找出哪些代码没有被执行,以此来缩小循环范围。
-
@ThomasM.DuBuisson GHCI 提出:
Exception: <<loop>>。我假设编译后的输出progname: <<loop>>是和 STDERR 消息。这是否意味着我有一个无限循环? -
是的,这是 RTS(运行时系统)检测到无限循环(在某些情况下它可以做到)。
-
特别是当它检测到在评估特定构造函数时导致的无限循环需要评估该构造函数。
-
@awashburn 您可以拥有完全定义的自引用值。
fibs = 0 : scanl (+) 1 fibs,例如。这就是它被允许的原因。
标签: debugging haskell compilation ghc haskell-platform