java的haskell中的e.printStackTrace等价物

时间:2015-04-18 15:00:40

标签: debugging haskell

我正在尝试使用git的haskell的kafka库并获得此error。 要调试此错误,我想在错误行打印stacktrace。

在python世界中,它只是,

import traceback; print traceback.print_exc()

(或)在java中,它是

e.printStackTrace()

那么,如何在haskell世界中做同样的事情?

1 个答案:

答案 0 :(得分:3)

你可以在Haskell中获得堆栈跟踪,但它不如e.printStackTrace()那么方便。这是一个最小的例子:

import Control.Exception
import Debug.Trace

getStack :: String -> SomeException -> IO a
getStack msg e = traceStack (show e) $ error msg

main :: IO ()
main = do
    (head []) `catch` (getStack "error on main at head")

最后,用ghc -prof -fprof-auto StackTrace.hs编译它,它将产生

Prelude.head: empty list              
Stack trace:                          
  Main.getStack (StackTrace.hs:5:9-56)     
  Main.main (StackTrace.hs:(8,9)-(9,74))   
  GHC.List.CAF (<entire-module>)      
StackTrace.exe: error on main at head