【发布时间】:2011-12-21 19:16:11
【问题描述】:
我正在寻找替换 loch(及其预处理器)的东西,因为它不能使用 ghc 7 编译。
具体来说,如果error 被调用,那么我想尽可能方便地弄清楚它是从哪里调用的(行号和堆栈跟踪会很好)。
【问题讨论】:
-
您无法真正控制其他库在何处或何时使用
error,但我个人对自己的代码的偏好是尽可能避免使用error。作为对阅读本文的任何人的一般建议,如果您需要知道代码为何采用特定的执行分支,不要使用error来查找堆栈跟踪;现在最好的方法可能是Debug.Trace。 -
@DanBurton 我认为这不适用于我的要求。假设我执行了我的程序并且意外地得到了
*** Exception: Prelude.head: empty list,现在我想知道产生这个错误的head调用在源代码中的什么位置。 -
我有一个 ghc 补丁,添加了它。我需要合并它。
-
@HaskellElephant that 的解决方案是避免您知道可能引发异常的函数。这不是一个完美的解决方案——总有一些你无法检查的代码——但它确实解决了大多数问题。
-
考虑使用 GHCi 调试器。 See my answer here for an example.
标签: haskell