调试haskell代码的好方法是什么?

时间:2009-03-23 11:12:51

标签: haskell debugging ghc

我使用过ghci调试器,但是如果它与文本编辑器有点集成以简化设置断点的过程,我会更喜欢。它可能不应该严格评估每个可见变量,但至少可以简化查看本地状态的过程。

我最近发现了跟踪功能,它允许从其他困难的地方调试打印输出。

4 个答案:

答案 0 :(得分:12)

调试Haskell代码的一个好方法是使用QuickCheckSmallCheck编写和测试代数法则。已经有几个Haskell调试器,包括Hat,Hood和Freya,但是没有一个被认为足够值得值得长期维护。

当它是Haskell时,你必须以不同的方式思考如何做事。 QuickCheck页面上的ICFP论文有一些很好的例子可以帮助您入门。如果你想要一个真实世界的例子xmonad使用QuickCheck进行了广泛的调试。

答案 1 :(得分:8)

是的,GHCi调试器的前端将是一件好事。也许我们会在下一个Hackathon中完成一些事情。但是,与此同时:

或者,Haskell非常适合使用QuickCheck进行自下而上的测试。即,单独测试您的组件,然后将它们放在一起。如果您的代码是纯粹的,这通常是Just Works。

答案 2 :(得分:5)

作为旁注,请注意调试多线程程序时Debug.trace不会成为您的朋友。

从长远来看,测试是最佳选择。

答案 3 :(得分:3)

出于我自己的目的,我发现这是一系列因素。

  1. 编写易于调试的功能代码,这意味着确保您的功能相对较小(5-20​​行),并且每个功能只执行一个明确定义的功能。
  2. 使用HUnit定义可以解决问题的测试用例。
  3. 正如其他答案中所见,很多人都喜欢QuickCheck。我发现很难为至少一些代码定义有意义的QuickCheck测试用例,所以通常更多地使用标准单元测试。话虽如此,在Real World Haskell的Chapter 11中使用QuickCheck是一个很好的介绍。

    如果您发现自己同时使用QuickCheck和HUnit,可能需要查看test-framework