找到&lt; <loop>&gt;的位置发生</环>

时间:2014-08-18 08:52:20

标签: debugging haskell infinite-loop

如果我们得到<<loop>>,则意味着Haskell设法检测到无限循环。有没有办法让ghc告诉我们这个循环发生在哪里?似乎Haskell应该在某个地方提供这些信息。

2 个答案:

答案 0 :(得分:24)

使用-prof-fprof-auto编译您的应用(如果您使用的是Cabal,请使用--enable-executable-profiling--ghc-options=-fprof-auto),然后使用{{1}运行它}。它会在发生错误时打印堆栈跟踪。这可以帮助您缩小范围。

示例:

+RTS -xc

答案 1 :(得分:1)

除了已编写的内容之外:仅在运行时检测到这些循环。检测基于试图评估已由[相同线程]评估的值的代码。显然,这绝不应该发生。

如果您正在寻找编译器开关来在编译时检测到这一点......那么您运气不好。它很容易静态地发现递归,但是判断递归是否是无限的并不是那么容易。