2009-03-23 13 views
31

मैंने ghci डीबगर का उपयोग किया है, लेकिन वास्तव में यह पसंद करेंगे कि यह ब्रेकपॉइंट्स सेट करने की प्रक्रिया को सरल बनाने के लिए कुछ पाठ संपादक के साथ एकीकृत किया गया था। यह शायद प्रत्येक दृश्य चर का सख्ती से मूल्यांकन नहीं करना चाहिए, लेकिन कम से कम स्थानीय राज्य को देखने की प्रक्रिया को सरल बनाना चाहिए।हैकेल कोड डीबग करने का एक अच्छा तरीका क्या है?

मुझे हाल ही में ट्रेस फ़ंक्शन मिला जो अन्यथा हार्ड स्थानों से डीबग प्रिंटआउट को अनुमति देकर सहायक रहा है।

+1

शायद आप इसे पहले ही पढ़ चुके हैं, लेकिन केवल संदर्भ के लिए: http://www.haskell.org/haskellwiki/Debugging – sastanin

उत्तर

8

हां, जीएचसीआई डीबगर के लिए एक अग्रभाग एक अच्छी बात होगी। शायद हम अगले हैकथॉन के दौरान कुछ हासिल करेंगे। हालांकि, औसत समय में:

  • The Monad Reader, Issue 10 (PDF) डीबगर का उपयोग करने पर एक लेख है। शायद आपको कुछ और संकेत दे सकते हैं।

वैकल्पिक रूप से, हास्केल क्विक चेक का उपयोग करके नीचे-नीचे परीक्षण के लिए अच्छी तरह से उधार देता है। यानी, अपने घटकों को व्यक्तिगत रूप से जांचें, फिर उन्हें एक साथ रखें। यदि आपका कोड शुद्ध है तो यह अक्सर काम करता है।

+5

लेकिन अक्सर, "उन्हें एक साथ रखें" जहां समस्या बैठती है। – RnMss

12

हास्केल कोड डीबग करने का एक अच्छा तरीका QuickCheck और SmallCheck का उपयोग करके बीजगणितीय कानूनों को लिखना और परीक्षण करना है। हैट, हुड और फ्रीया समेत कई हास्केल डिबगर्स रहे हैं, लेकिन उनमें से कोई भी लंबे समय तक बनाए रखने के लायक होने के लिए पर्याप्त मूल्यवान नहीं माना गया है।

जब यह हास्केल है, तो आपको चीजों को कैसे करना है इसके बारे में अलग-अलग सोचना होगा। क्विक चेक पेज पर आईसीएफपी पेपर में आपको शुरू करने के लिए कुछ अच्छे उदाहरण हैं। यदि आप एक असली दुनिया उदाहरण चाहते हैं xmonad क्विक चेक का उपयोग करके बड़े पैमाने पर डीबग किया गया है।

+1

त्वरित चेक लिंक 403 त्रुटि दे रहा है। (अक्टूबर 05, 03:38:04 यूटीसी) यदि यह एक क्षणिक त्रुटि नहीं है तो कोई नया लिंक पोस्ट कर सकता है –

+0

यहां एक अपडेट किया गया त्वरित चेक लिंक है; (www.cs -> www.cse): http://www.cse.chalmers.se/~rjmh/QuickCheck/ – SuperElectric

+26

क्या मैं सम्मानपूर्वक ध्यान दे सकता हूं कि डिबगिंग और परीक्षण के बीच कोई अंतर है?डिबगिंग एक बग का कारण ढूंढ रही है, जबकि परीक्षण बग के अस्तित्व की खोज कर रहा है। – kristianp

5

एक साइड नोट के रूप में, ध्यान रखें कि Debug.trace मल्टीथ्रेड किए गए प्रोग्राम डिबग करते समय आपका मित्र नहीं होगा।

परीक्षण लंबे समय तक जाने का तरीका है।

3

मेरे अपने उद्देश्यों के लिए मुझे लगता है कि यह कारकों का संयोजन है।

  1. कार्यात्मक कोड डीबग करना आसान लिखें, इसका मतलब यह सुनिश्चित करना है कि आपके कार्य अपेक्षाकृत छोटे (5-20 लाइनें) हैं और वे केवल एक स्पष्ट रूप से परिभाषित चीज करते हैं।
  2. परीक्षण समस्याओं को परिभाषित करने के लिए का उपयोग करें जो आपकी समस्याओं को सामने लाएंगे।

जैसा कि अन्य उत्तरों में देखा गया है, बहुत से लोग QuickCheck से प्यार करते हैं। मुझे कम से कम कुछ कोड के लिए सार्थक क्विक चेक परीक्षण मामलों को परिभाषित करना मुश्किल हो गया है, इसलिए आम तौर पर मानक इकाई परीक्षणों का अधिक उपयोग करते हैं। ऐसा कहा जा रहा है कि रियल वर्ल्ड हास्केल के Chapter 11 में क्विक चेक का उपयोग करने के लिए एक उत्कृष्ट परिचय है।

क्या आपको अपने आप को क्विक चेक और हनीट दोनों का उपयोग करना चाहिए, तो आप test-framework देख सकते हैं।

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

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