如何在Haskell中使用行和堆栈跟踪打印语句?

时间:2016-02-14 19:42:05

标签: debugging haskell printing stdout

如何在Haskell中使用行号和堆栈跟踪创建打印语句?

2 个答案:

答案 0 :(得分:3)

您可能希望在最新版本的GHC中使用GHC.Stack

答案 1 :(得分:0)

要么使用这个......

  1. Haskell Print Debugger - http://hackage.haskell.org/package/print-debugger
  2. 或者使用这个...

    1. Debug.Trace.traceStack - https://hackage.haskell.org/package/base-4.8.2.0/docs/Debug-Trace.html
    2. 前者可以打印单行格式化。后者可以打印多行未格式化。

      Debug.Trace.traceStack需要使用-frof和-fprof-auto进行编译并使用+ RTS -xc运行

      Debug.Trace.traceStack示例(来自“What I Wish I Knew When Learning Haskell”):

      http://dev.stephendiehl.com/hask/):
          $ ghc -O0 -rtsopts=all -prof -auto-all --make stacktrace.hs
          ./stacktrace +RTS -xc
      

      Haskell打印调试器示例:

      - http://i.imgur.com/av57mTS.png

      import Debug.Print.StackTraceDebug
      
      main = debugTraceIO "This has a stack trace."
      
      ____________________________________________
      This has a stack trace. in thread "1" :
          at Main.call(Main.hs:5)
      

      如果您只需要找到您的打印报表,第一个选项是更好的选择。

      P.S。我在这里宣传自己的包裹:

      https://github.com/JohnReedLOL/HaskellPrintDebugger