2015-04-18 1 views
2

J'essaye la bibliothèque de kafka de haskell de git et ai obtenu ce error. Pour corriger cette erreur, j'aime imprimer stacktrace à la ligne d'erreur.e.printStackTrace java équivalent dans haskell

Dans le monde de python, il est juste,

import traceback; print traceback.print_exc() 

(ou) en Java, il est

e.printStackTrace() 

Alors, comment faire la même chose dans le monde de haskell?

+1

La page wiki sur le débogage pourrait avoir une réponse pour vous: https://wiki.haskell.org/Mise au point –

+2

Les erreurs Haskell indiquent généralement tous les contes. Je n'ai jamais trouvé une erreur Haskell qui ne peut pas être résolue en utilisant uniquement le message d'erreur. L'erreur réelle indique qu'une valeur de 'Left something' a été donnée, donc elle doit échouer. J'ai posté ma réponse sur github. – AJFarmar

Répondre

3

Vous pouvez obtenir des traces de pile dans Haskell mais ce n'est pas aussi pratique que e.printStackTrace(). Voici un exemple minimal:

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") 

Enfin, le compiler avec ghc -prof -fprof-auto StackTrace.hs et il produira

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 
+0

Arbus, Comment avez-vous dirigé ça? J'ai fait 'runhaskell file.hs' et il a imprimé' Prelude.head: liste vide st.hs: erreur sur le principal à la tête '... avez-vous utilisé ghc ou runhaskell? –

+0

ah désolé, j'ai oublié de mentionner que vous devez compiler ceci comme ceci: 'ghc -prof -fprof-auto StackTrace.hs', a édité la réponse maintenant – Arbus