2013-07-18 32 views
3

我已经写了一个haskell程序,它可以处理10000件事情。现在,仅仅为了它,我用100万美元跑了它,得到了stack space overflow如何诊断哈斯克尔堆栈溢出

我知道foldr/foldl问题以及可能由懒惰引起的问题,但是我目前不知道我的代码中的哪一部分导致了这个问题。

攻击这些问题的好方法是什么?

+2

真实世界Haskell有关于空间泄漏分析的章节:http://book.realworldhaskell.org/read/profiling-and-optimization.html – cdk

+0

可能的重复[是否可能在Haskell中分析空间使用情况](http ://www.stackoverflow.com/questions/12426266/is-it-possible-to-profiling-space-usage-in-haskell) – cdk

回答

1

我发现Debug.Trace模块对此类事物很有用。在没有看到任何代码的情况下,很难提供一个有用的示例,但如果您查看该文档,则可能会找到一些有用的示例。否则,我会检查你的代码是否可以填充调用堆栈的非尾部递归。

+3

非尾递归不是唯一可能导致Haskell堆栈溢出的事情。我们还必须寻找“thunk builp”(不幸的是,这可能会更微妙) – luqui

+0

谁可以忘记thunk? +1但是我确实认为thunk是堆积而不是堆叠。 – Nigel

+0

它们分配在堆上,但是在评估它们时使用堆栈。 – luqui