java 的 e.printStackTrace 相当于 haskell
java's e.printStackTrace equivalent in haskell
我正在尝试 git 的 haskell 的 kafka 库并得到这个 error。
为了调试这个错误,我喜欢在错误行打印堆栈跟踪。
在python的世界里,就是,
import traceback; print traceback.print_exc()
(或)在java中是
e.printStackTrace()
那么,如何在 haskell 世界中做同样的事情?
您可以在 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
我正在尝试 git 的 haskell 的 kafka 库并得到这个 error。 为了调试这个错误,我喜欢在错误行打印堆栈跟踪。
在python的世界里,就是,
import traceback; print traceback.print_exc()
(或)在java中是
e.printStackTrace()
那么,如何在 haskell 世界中做同样的事情?
您可以在 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