此页面可能有所帮助.
Debug.trace是你的朋友,它允许你基本上做一些printf调试.它评估并打印其第一个参数,然后返回其第二个参数.所以,如果你有类似的东西
foo :: Show a => a -> a
foo = bar . quux
Run Code Online (Sandbox Code Playgroud)
您可以通过更改foo为以下内容来调试foo参数的"值" :
import Debug.Trace(trace)
foo :: Show a => a -> a
foo x = bar $ quux $ trace ("x is: " ++ show x) x
Run Code Online (Sandbox Code Playgroud)
foo现在的工作方式和以前一样,但是当你调用foo 1它时,它现在会x is: 1在评估时打印到stderr.
要进行更深入的调试,您需要使用GHCI的调试命令.具体来说,听起来你正在寻找:force命令,它强制评估变量并将其打印出来.(另一种选择是:print命令,它打印尽可能多的已经评估的变量,而不再进行评估.)
请注意,:force更有助于计算变量的内容,但也可能会更改程序的语义(如果您的程序依赖于懒惰).
一般的GHCI调试工作流程如下所示:
:break设置断点:list和:show context检查代码中的位置:show bindings检查变量绑定:print以查看当前绑定的内容:force如有必要,请使用以检查绑定如果您正在尝试调试无限循环,它也有助于使用
:set -fbreak-on-error:trace myLoopingFunc x y然后你可以Ctrl-C在循环中点击并使用:history以查看循环.
| 归档时间: |
|
| 查看次数: |
2035 次 |
| 最近记录: |