我使用过ghci调试器,但是如果它与文本编辑器有点集成以简化设置断点的过程,我会更喜欢。它可能不应该严格评估每个可见变量,但至少可以简化查看本地状态的过程。
我最近发现了跟踪功能,它允许从其他困难的地方调试打印输出。
答案 0 :(得分:12)
调试Haskell代码的一个好方法是使用QuickCheck和SmallCheck编写和测试代数法则。已经有几个Haskell调试器,包括Hat,Hood和Freya,但是没有一个被认为足够值得值得长期维护。
当它是Haskell时,你必须以不同的方式思考如何做事。 QuickCheck页面上的ICFP论文有一些很好的例子可以帮助您入门。如果你想要一个真实世界的例子xmonad
使用QuickCheck进行了广泛的调试。
答案 1 :(得分:8)
是的,GHCi调试器的前端将是一件好事。也许我们会在下一个Hackathon中完成一些事情。但是,与此同时:
或者,Haskell非常适合使用QuickCheck进行自下而上的测试。即,单独测试您的组件,然后将它们放在一起。如果您的代码是纯粹的,这通常是Just Works。
答案 2 :(得分:5)
作为旁注,请注意调试多线程程序时Debug.trace
不会成为您的朋友。
从长远来看,测试是最佳选择。
答案 3 :(得分:3)
出于我自己的目的,我发现这是一系列因素。
正如其他答案中所见,很多人都喜欢QuickCheck。我发现很难为至少一些代码定义有意义的QuickCheck测试用例,所以通常更多地使用标准单元测试。话虽如此,在Real World Haskell的Chapter 11中使用QuickCheck是一个很好的介绍。
如果您发现自己同时使用QuickCheck和HUnit,可能需要查看test-framework。