相关疑难解决方法(0)

如何调试Haskell代码?

我有个问题.我写了一个很大的Haskell程序,它始终适用于小输入.现在,当我想测试它并生成更大的输入时,我总是收到消息:

HsProg: Prelude.head: empty list
Run Code Online (Sandbox Code Playgroud)

我用过Prelude.head很多次了.我该怎么做才能找到更多或获得更好的错误输出以获得它发生的代码行?

debugging haskell

39
推荐指数
2
解决办法
1万
查看次数

跟踪Haskell中的错误

如何获得有关Haskell错误发生位置的更多信息?例如,昨天我正在研究一个Haskell程序,它解析输入文件,转换数据然后打印出报告信息.

有一次,我跑了"主"并回来了

*** Prelude.read: parse error
Run Code Online (Sandbox Code Playgroud)

没有其他信息.幸运的是,我知道我只是在一个地方打电话阅读并且能够修复它,但对于未来:

  • 是否有可能获得这些错误的回溯或行号?
  • 是否有可能获得触发错误的实际数据,即导致解析错误的字符串?

谢谢!

使用GHC 编辑.

haskell

14
推荐指数
2
解决办法
3421
查看次数

如何显示Haskell中抛出的错误的回溯

我正在调试我在Haskell中为我的文凭论文实现的算法.它似乎对大多数输入正常工作,但我发现一个输入使GHC抛出错误

***例外:Map.find:元素不在地图中

由于我的代码中有很多Map查找,因此我需要找到抛出此错误的行来理解它.我通读了这个指南,但是虽然我设置了标志fbreak-on-exception(和-error),所有GHCi在跟踪我正在测试的函数后给了我:

[...]> :trace test
[...]
Stopped at <exception thrown>
_exception ::
  e = GHC.Exception.SomeException (GHC.Exception.D:Exception _
                                                         (GHC.Show.D:Show ...) ....)
                              (GHC.Exception.ErrorCall ['M',....])
Unable to list source for <exception thrown>
Try rerunning with :trace, :back then :list
[<exception thrown>] [...]> :history
Empty history. Perhaps you forgot to use :trace?
Run Code Online (Sandbox Code Playgroud)

试图:trace再次似乎并没有帮助的.

那么,有人可以告诉我出了什么问题或提供另一种找到违规行的方法吗?提前致谢!

PS:我使用的是GHC 7.0.3版本,因此链接指南应该适用.

haskell

14
推荐指数
1
解决办法
2913
查看次数

标签 统计

haskell ×3

debugging ×1