2017-02-08 9 views
5

हम्म ... मेरे शिक्षक, मेरे कुछ सहपाठियों और मैं एक डीबगर परियोजना बनाने जा रहे हैं। हमें आशा है कि हमारा डीबगर इंटरैक्टिव है, यानी, जब कोड टाइप किए जाते हैं, तो परिणाम कुछ सेकंड बाद प्रदर्शित किया जाएगा, और इनपुट कोड बदलते समय परिणाम बदलता है। दूसरी तरफ, चलते समय, हम पूर्व पंक्ति या ब्रेकपॉइंट्स पर रोलबैक कर सकते हैं।"टाइम ट्रैवल डीबगर" का सिद्धांत क्या है?

मेरे शिक्षक के शब्द के अनुसार, "टाइम ट्रैवल डिबगिंग" तकनीक प्रोग्रामिंग के दौरान शामिल होगी। मैंने कुछ परियोजनाओं की खोज की जो दूसरों द्वारा बनाए रखा गया लेकिन मैं कोड को खराब समझ सकता हूं और इनमें से किसी भी रीडमे फाइलों में इस तकनीक के बारे में कोई परिचय नहीं है।

संदर्भ: https://github.com/mattgodbolt/compiler-explorer

+5

क्या आपका शिक्षक डॉ हू का प्रशंसक है, शायद? "टाइम ट्रैवल कंपाइलिंग" एक मानक शब्द नहीं है। ऐसा लगता है कि उन्होंने एक वाक्यांश बनाया है। आप उनसे पूछ सकते हैं कि इसका क्या अर्थ है। –

+0

यह एक डीबगर में ब्रेकपॉइंट सेट करने में सक्षम होने के बारे में है और फिर * ब्रेकपॉइंट से पहले * बिंदुओं पर रनटाइम पर्यावरण की स्थिति देखने के लिए कथन के माध्यम से * पीछे * पीछे। – Pointy

+0

और वास्तव में * compilers * के साथ वास्तव में बहुत कुछ नहीं है, वास्तव में; यह एक रनटाइम सिस्टम चीज है। खैर, मुझे लगता है * एक कंपाइलर कुछ प्रकार के लेखापरीक्षा संदर्भ को बनाए रखने के लिए कोड उत्पन्न कर सकता है, लेकिन यह चीजों को करने का वास्तव में अजीब तरीका लगता है। – Pointy

उत्तर

6

यह आमतौर पर "समय यात्रा डिबगिंग" के रूप में जाना जाता है, और अक्सर "कार्यात्मक रिएक्टिव प्रोग्रामिंग" के साथ जुड़ा हुआ है। (वे शब्द हैं जिन्हें आप आसानी से खोज सकते हैं।) Elm Language ब्लॉग पर कुछ उचित रूप से सुलभ दस्तावेज़ हैं (उदाहरण के लिए, time travel made easy), लेकिन मेरा सुझाव है कि आप मध्य में डाइविंग करने और समय यात्रा करने के बजाय शुरुआत में शुरुआत करें समझ (कुछ पन इरादा :-))

कड़ाई से बोलते समय, टाइम ट्रैवल डीबगिंग कुछ ऐसा होता है जो रनटाइम पर होता है, लेकिन यदि आप एक कार्यात्मक भाषा (जैसे हास्केल, एल्म, ओसीएएमएल, या विभिन्न) में प्रोग्रामिंग कर रहे हैं तो यह बहुत आसान है। अन्य, जिसके लिए समय-यात्रा करने वाले डिबगर्स लागू किए गए हैं), और इन भाषाओं को संकलित करना (हां, उन्हें संकलित किया गया है) में कुछ रोचक अवधारणाएं शामिल हैं।

एल्म जावास्क्रिप्ट को संकलित करता है, जो इसे प्रयोग करने के लिए अपेक्षाकृत आसान बनाता है।

परियोजना के साथ मजा लें।

+0

AFAIK इसका उपयोग सभी शुद्ध कार्यात्मक प्रोग्रामिंग के साथ किया जा सकता है, आप इसे केवल कार्यात्मक क्यों सीमित कर रहे हैं प्रतिक्रियाशील? –

+0

@Guy: मैं नहीं हूँ। वास्तव में, इसका उपयोग गैर-कार्यात्मक प्रोग्रामिंग के साथ भी किया जा सकता है; जावास्क्रिप्ट के लिए एक समय-यात्रा डीबगर है, जो निश्चित रूप से एक कार्यात्मक प्रोग्रामिंग भाषा नहीं है। मैंने जो कहा वह यह है कि यह अक्सर एफआरपी से जुड़ा होता है, जिसका उद्देश्य ओपी को कुछ जानकारी देने के लिए कुछ पॉइंटर्स देना था। मैंने दूसरे पैराग्राफ में कार्यात्मक भाषा की सूची में ओसीएएमएल जोड़ा। – rici

+0

आप भी उल्लेख करना चाहेंगे, [विजुअल स्टूडियो इंटेलिटेस] (https://msdn.microsoft.com/en-us/library/dd264915.aspx) –

1

समय यात्रा डिबगिंग भी रिवर्स डिबगिंग के रूप में जाना जाता है। आम आदमी शब्दों में, आप एक ही पंक्तियों को बार-बार डीबग कर सकते हैं (ऐप को रोक/पुनरारंभ किए बिना)।

उदाहरण के लिए, आप एक विधि को डीबग कर रहे हैं जिसने अपवाद के कारण को खोजने के लिए लाइन 10 पर अपवाद फेंक दिया है, फिर भी आप उस विधि को पहले बिंदु से निष्पादित कर सकते हैं, पूर्ण डीबगिंग प्रक्रिया को पुनरारंभ किए बिना लाइन 4 कहें। यह सब वास्तविक समय और सुंदर है।

मैंने इस सुविधा का उपयोग विजुअल स्टूडियो में किया है।

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