GHC

2016-01-09 8 views
7

से अधिक वर्णनात्मक त्रुटि संदेश मैं GHCi के माध्यम से कुछ कोड भाग गया, और यह त्रुटि आई:GHC

*** Exception: Prelude.!!: index too large 

थोड़ी देर मैं एक से पर चला गया,, बग (जो कारण होता था ठीक करने के लिए के रूप में आप कल्पना कर सकते हैं के बाद इंडेक्स जो बहुत बड़ा था), लेकिन मेरी इच्छा है कि जीएचसी ने मुझे बताया होगा कि इस बड़ी इंडेक्स का मूल्यांकन किस लाइन पर किया जा रहा था।

वहाँ एक रास्ता है करने के लिए या तो

  • ए) GHCi अधिक वर्बोज़ बनाने, या
  • बी) ज़ाहिर है, एक आम बात है कि इस त्रुटि किसी भी तरह से बचा जाता है छोटे अनुक्रमणिका का उपयोग कर के (शर्म का उपयोग करें)
+0

निर्भर टाइपिंग एक त्वरित सुधार होगा ... –

उत्तर

5

You can use GHC's profiling facilities to get a kind of stack trace on errors, उदाहरण के लिए, मान लीजिए यह अपने स्रोत फ़ाइल है:

xs :: [Int] 
xs = [1..10] 

foo :: Int -> IO() 
foo i = print $ xs !! i 

main :: IO() 
main = mapM_ foo [1..10] 

आप

ghc --make -prof -fprof-auto StackTrace.hs 

के साथ इस संकलन तो यह

./StackTrace +RTS -xc 

के रूप में चलाने तो आप

*** Exception (reporting due to +RTS -xc): (THUNK_1_0), stack trace: 
    GHC.List.CAF 
    --> evaluated by: Main.foo, 
    called from Main.main, 
    called from Main.CAF 
StackTrace: Prelude.!!: index too large 

जो कम से कम आप mainfoo श्रृंखला बताता मिलता है।

संबंधित मुद्दे