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

Joe*_*ood 14 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版本,因此链接指南应该适用.

hal*_*hal 9

也许这会对你有所帮助

http://www.haskell.org/haskellwiki/Debugging

LocH为assert提供包装器,用于生成源定位的异常和错误.
...
添加:import Debug.Trace.Location然后使用预处理器重新编译:

__PRE__

维基上还有其他提示,例如使用Safe-Library.