2011-07-05 11 views
13

में फेंकने वाली त्रुटि के लिए बैकट्रैक कैसे प्रदर्शित करें मैं वर्तमान में अपने डिप्लोमा थीसिस के लिए हास्केल में लागू एक एल्गोरिदम डीबग कर रहा हूं। यह सबसे आदानों के लिए सही ढंग से काम करने लगता है, फिर भी मैं एक इनपुट जो GHC त्रुटि फेंक बनाता पायाहास्केल

*** अपवाद: Map.find: तत्व नक्शा

मैं कई है के बाद से में नहीं मेरे कोड में मानचित्र लुकअप, मुझे इस त्रुटि को फेंकने की रेखा को खोजने की जरूरत है। मैं this guide के माध्यम से पढ़ते हैं, लेकिन हालांकि मैं झंडा fbreak-on-exception (और -error) निर्धारित करते हैं, सब GHCi समारोह का पता लगाने के बाद मुझे देता है मैं कर रहा हूँ परीक्षण है:

[...]> :trace test 
[...] 
Stopped at <exception thrown> 
_exception :: 
    e = GHC.Exception.SomeException (GHC.Exception.D:Exception _ 
                 (GHC.Show.D:Show ...) ....) 
           (GHC.Exception.ErrorCall ['M',....]) 
Unable to list source for <exception thrown> 
Try rerunning with :trace, :back then :list 
[<exception thrown>] [...]> :history 
Empty history. Perhaps you forgot to use :trace? 

पुनः प्रयास किया जा :trace या तो मदद करने के लिए प्रतीत नहीं होता।

तो, क्या कोई मुझे बता सकता है कि क्या गलत हो रहा है या आपत्तिजनक रेखा को खोजने का दूसरा तरीका प्रदान कर सकते हैं? अग्रिम में धन्यवाद!

पीएस: मैं जीएचसी संस्करण 7.0.3 का उपयोग कर रहा हूं, इसलिए लिंक की गई मार्गदर्शिका लागू होनी चाहिए।

+0

बेहतर समाधान के लिए [यहां] (http://stackoverflow.com/questions/8595077/how-can-i-get-the-position-where-error-was-called) – Simon

उत्तर

9

हो सकता है कि इस मदद से आप

http://www.haskell.org/haskellwiki/Debugging

झील रैपर से अधिक स्रोत स्थित अपवाद और त्रुटियों पैदा करने के लिए जोर देता है।
...
जोड़ने: import Debug.Trace.Location और फिर आगे पूर्वप्रक्रमक के साथ फिर कंपाइल:

 $ ghc A.hs --make -pgmF loch -F -no-recomp 
    [1 of 1] Compiling Main    (A.hs, A.o) 
    Linking A ... 
    $ ./A 
    A: A.hs:14:14-19: Maybe.fromJust: Nothing

वहाँ भी उदाहरण की तरह, विकि पर अन्य सुझाव दिए गए हैं Safe-Library का उपयोग कर।

+0

धन्यवाद हैलो! दुर्भाग्यवश, लोच अब समर्थित नहीं है, कम से कम यह जीएचसी के आधुनिक संस्करणों पर संकलित नहीं है। लेकिन मैं आपके विकी लिंक में अन्य विधियों का प्रयास करूंगा। –

+0

ठीक है, सुरक्षित-लाइब्रेरी को देखने के बाद, मैंने 'data.Map। (!)' के सभी उदाहरणों को 'findWithDefault (त्रुटि "पंक्ति nr") के साथ बदल दिया और बग पाया। एक बार फिर धन्यवाद! –

+1

बढ़िया! :) मैंने अभी http://hackage.haskell.org/package/loch-th पाया, जो कि जीएचसी 7 पर निर्माण लगता है। – hal