2013-07-18 68 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