paint-brush
डिबग लाइक ए सीनियर देव: डिबगिंग प्रोग्राम कंट्रोल फ्लोद्वारा@shai.almog
956 रीडिंग
956 रीडिंग

डिबग लाइक ए सीनियर देव: डिबगिंग प्रोग्राम कंट्रोल फ्लो

द्वारा Shai Almog7m2022/12/14
Read on Terminal Reader
Read this story w/o Javascript

बहुत लंबा; पढ़ने के लिए

नियंत्रण प्रवाह कदम से कहीं अधिक है। विस्तृत राज्यों और व्यवहारों को पुन: उत्पन्न करने के लिए डिबगिंग करते समय आप मनमाने ढंग से कोड ऑफ़सेट पर "कूद" सकते हैं!
featured image - डिबग लाइक ए सीनियर देव: डिबगिंग प्रोग्राम कंट्रोल फ्लो
Shai Almog HackerNoon profile picture

अभी तक, मैंने पाठ्यक्रम के पहले 3 वीडियो प्रकाशित किए हैं और चौथा कल प्रकाशित करूंगा। मैं प्रभाव को अधिकतम करने के लिए YouTube पर प्रति सप्ताह दो वीडियो प्रकाशित करने की योजना बना रहा हूं, लेकिन यहां, मैं अतिसंतृप्ति से बचने के लिए प्रति सप्ताह केवल एक पाठ ब्लॉग करूंगा।


मैंने लगभग 4 घंटे की वीडियो सामग्री शूट की और अभी भी आठ में से दूसरा मॉड्यूल पूरा नहीं किया है। यह कोर्स बहुत विस्तृत और गहन होगा।


मैं अभी कोर्स प्लेटफॉर्म पर काम कर रहा हूं, अच्छी प्रगति कर रहा हूं, और उम्मीद करता हूं कि इसे जल्द ही यहां प्रकाशित करूंगा। जब तक आप इसे पढ़ते हैं, तब तक यह पहले से ही लाइव हो सकता है!


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


मैं GraalVM के साथ स्प्रिंग बूट 3 पर कोर्स प्लेटफॉर्म बना रहा हूं, इसलिए यह आदर्श रूप से दुबला, तेज और काफी सरल होगा। देखने का अच्छा अनुभव देने के लिए मेरी योजना YouTube पर वीडियो को असूचीबद्ध वीडियो के रूप में होस्ट करने की है।


इसका मतलब है कि डेवलपर मेरे भरोसे को धोखा दे सकते हैं और असूचीबद्ध वीडियो साझा कर सकते हैं। मुझे आशा है कि वे नहीं करते हैं।


मेरा तर्क यहां कम ओवरहेड और उत्कृष्ट प्रदर्शन है। मैं भी कुछ वर्षों में पाठ्यक्रम को निःशुल्क बनाना चाहूंगा। YouTube का उपयोग करके, मैं वीडियो को सार्वजनिक करके पाठ्यक्रम को निःशुल्क बना सकता हूँ।


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


मेरी किताब को देखना न भूलें और भविष्य के वीडियो के लिए YouTube चैनल को सब्सक्राइब करें!

प्रतिलिपि

स्केल पर डिबगिंग के दूसरे भाग में आपका स्वागत है जहाँ आप डिबगिंग की गुप्त तरकीबें सीख सकते हैं।


इस खंड में, हम डिबगिंग के सबसे बुनियादी पहलू पर चर्चा करेंगे। हमने ब्रेकपॉइंट मारा। अब क्या?

ठीक है, यह वह जगह है जहां डिबगर्स हमें प्रवाह को नियंत्रित करने की जांच करने देते हैं कि नियंत्रित वातावरण में सब कुछ कैसे काम करता है।


तो आज के एजेंडे में क्या है?


हम आगे बढ़ने और कोड में चर्चा करेंगे, मुझे आशा है कि इस सूची में से अधिकांश आप से परिचित हैं। अंतिम दो आइटम जहां हम नियंत्रण प्रवाह को बाधित करते हैं, हो सकता है कि आप इससे परिचित न हों। मुझे पूरा यकीन है कि आप में से अधिकांश एजेंडे के अंतिम आइटम से परिचित नहीं हैं। मुझे कैसे पता चलेगा? बने रहें और पता करें!

स्टेप ओवर, इनटू, आउट और फोर्स

स्टेप ओवर नियंत्रण प्रवाह का सबसे बुनियादी रूप है। हम कोड को लाइन में निष्पादित होने देते हैं, और फिर हम चर फलक में परिणामों का निरीक्षण कर सकते हैं। यह सरल और आसान है।


इस मामले में, मैंने यहां केवल एक-दो बार बटन दबाया, लेकिन समान प्रभाव पाने के लिए मैं केवल F8 भी दबा सकता था...


इसके बाद, हम दो भिन्न संक्रियाओं, स्टेप इन और संबंधित स्टेप आउट पर चर्चा करेंगे। हम जिस विधि का आह्वान करते हैं, उसमें कदम रखा जाता है। ध्यान दें कि अगर स्टेप में जाने का कोई तरीका नहीं है, तो इन स्टेप ओवर की तरह काम करेगा।


हमारे पास दो स्टेप-इन ऑपरेशन हैं। नियमित एक और बल-चरण जिसमें सामान्य रूप से समान रूप से कार्य करता है। जब हम एक एपीआई में कदम रखना चाहते हैं तो हमें बल संस्करण की आवश्यकता होती है जिसे इंटेलीजे सामान्य रूप से छोड़ देगा। हम एक विधि में कदम रखने के लिए F7 दबा सकते हैं। हम कदम बढ़ाने के लिए Shift F7 दबा सकते हैं।


जब हम एक विधि को देखना समाप्त कर लेते हैं और बाकी की परवाह नहीं करते हैं, तो हम बाहर निकल सकते हैं। यह बाकी विधि को क्रियान्वित करता है और रिटर्न करता है।


ध्यान दें कि यदि रिटर्न से पहले हमारे पास ब्रेकपॉइंट है तो यह अभी भी ब्रेकपॉइंट पर रुकेगा जैसा कि हम इस मामले में देखते हैं। हम इस बटन को बाहर निकलने के लिए यहां दबा सकते हैं या हम वही काम करने के लिए शिफ्ट-F8 दबा सकते हैं।

जारी रखें और कर्सर पर दौड़ें

ब्रेकप्वाइंट फिर से हिट होने तक परियोजना के निष्पादन के साथ आगे बढ़ें। इसे बायोडाटा भी कहते हैं। यह एक साधारण सुविधा है जिसका हम बहुत उपयोग करते हैं। आप यहां प्ले बटन के विशेष संस्करण को दबाकर जारी रख सकते हैं। शॉर्टकट भी मददगार है क्योंकि हम इसका बहुत उपयोग करते हैं, यह F9 है।


रन टू कर्सर हमें उन पंक्तियों को छोड़ देता है जो अरुचिकर हैं और उस कोड तक पहुँचते हैं जो मायने रखता है। हम समान प्रभाव प्राप्त करने के लिए उस रेखा पर एक ब्रेकपॉइंट सेट कर सकते हैं, लेकिन यह कभी-कभी अधिक सुविधाजनक होता है क्योंकि यह ब्रेकपॉइंट को सेट और अनसेट करने की आवश्यकता को हटा देता है।


हम इस बटन को कर्सर तक चलाने के लिए दबा सकते हैं, या हम इस सुविधा के शॉर्टकट के रूप में ALT-F9 का उपयोग कर सकते हैं।

फोर्स रिटर्न एंड थ्रो एक्सेप्शन

इस सुविधा को IntelliJ/IDEA में फ़ोर्स रिटर्न के रूप में जाना जाता है।


बल वापसी विकल्प देखने के लिए, हम स्टैक ट्रेस पर राइट-क्लिक करते हैं और विकल्पों का एक सेट देख सकते हैं। ड्रॉप फ्रेम एक और भी दिलचस्प विकल्प है जिसे मैं जल्द ही दिखाऊंगा।


थ्रो एक्सेप्शन ऑप्शन पर ध्यान दें जो फोर्स रिटर्न के समान है, लेकिन यह विधि से एक अपवाद को फेंकता है।


एक बार जब मैं इस विकल्प पर क्लिक करता हूं, तो मुझे विधि से वापसी मूल्य दर्ज करने के लिए एक संवाद दिखाया जाता है। यह मुझे उस विधि से लौटाए गए मान को बदलने देता है जो बहुत उपयोगी होता है जब मैं हार्ड-टू-रीप्रोड्यूस बग को डीबग करना चाहता हूं।


एक ऐसे मामले की कल्पना करें जहां एक ग्राहक के साथ विफलता होती है, लेकिन आप इसे पुन: उत्पन्न नहीं कर सकते। इस मामले में, मैं अनुकरण कर सकता हूं कि विधि से भिन्न मान लौटाकर ग्राहक क्या अनुभव कर रहा होगा।


यहाँ, मान एक बूलियन चर है, इसलिए यह सरल है। लेकिन आपका कोड एक वस्तु लौटा सकता है; इस तकनीक का उपयोग करके, आप उस वस्तु को मनमाने मूल्य से बदल सकते हैं। एक अच्छा उदाहरण शून्य होगा, क्या होगा यदि यह विधि शून्य हो जाए, तो क्या यह मेरे उपयोगकर्ता द्वारा अनुभव की जा रही समस्या को पुन: उत्पन्न करेगा?


इसी तरह, थ्रो एक्सेप्शन हमें किनारे के मामलों को पुन: उत्पन्न करने देता है जैसे कि एक मनमाना विफलता के कारण अपवाद फेंकना।


एक बार जब हम ओके दबाते हैं, तो हम एक अलग मान के साथ लौटते हैं। इस मामले में, मैं विधि के किनारे पर था लेकिन मैं इसे विधि की शुरुआत में कर सकता था और विधि के निष्पादन को पूरी तरह से छोड़ देता था।


यह हमें ऐसे मामलों का अनुकरण करने देता है जहां कोई विधि विफल हो सकती है, लेकिन हम उसके व्यवहार का उपहास करना चाहते हैं। यह समझ में आता है अगर हम ग्राहक द्वारा देखे गए व्यवहार को पुन: उत्पन्न नहीं कर सकते हैं। हम इस तरह के टूल का उपयोग करके अनुकरण कर सकते हैं।

ड्रॉप फ्रेम

ड्रॉप फ्रेम लगभग उतना ही क्रांतिकारी है, लेकिन यह एक "साफ-सुथरी चाल" भी है। यहाँ, मैंने गलती से एक विधि में कदम रखा। ओह, मैं ऐसा नहीं करना चाहता था। मैं इसमें कदम रखने से पहले कुछ बदलना चाहता था... सौभाग्य से वहाँ ड्रॉप फ्रेम है।


हमने देखा कि मैं राइट-क्लिक मेनू में इस तक पहुँच सकता हूँ; आप इसे ट्रिगर करने के लिए यहां क्लिक भी कर सकते हैं।


ड्रॉप फ्रेम प्रभावी रूप से स्टैक फ्रेम को गिरा देता है। यह एक अनडू ऑपरेशन है। लेकिन ऐसा बिल्कुल नहीं है। यह उन अवस्था परिवर्तनों को पूर्ववत नहीं कर सकता है जो उस विधि के भीतर हुए हैं जिसमें हमने कदम रखा था।


इसलिए, यदि आप विधि में कदम रखते हैं और वेरिएबल जो स्टैक पर नहीं हैं, बदल दिए गए थे, वे बदले रहेंगे।


स्टैक पर चर वे चर हैं जिन्हें विधि तर्क के रूप में घोषित या स्वीकार करती है, उन्हें रीसेट कर दिया जाएगा। हालाँकि, यदि उन चरों में से एक किसी वस्तु की ओर इशारा करता है, तो वह वस्तु ढेर में रहती है, और वहाँ परिवर्तन को ढेर को खोलकर रीसेट नहीं किया जा सकता है।


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


यह उससे भी बेहतर हो जाता है!

रेखा पर जायें

जंप टू लाइन IntelliJ में एक गुप्त विशेषता है। यह काम करता है, लेकिन डेवलपर्स इसके बारे में नहीं जानते हैं। इसका उपयोग करने के लिए आपको जंप टू लाइन प्लगइन स्थापित करना होगा। चूंकि इसकी स्थापना अपेक्षाकृत कम है, मुझे लगता है कि लोगों को यह नहीं पता कि यह मौजूद है। क्योंकि यह एक जरूरी प्लगइन है। यह आपके डिबग करने के तरीके को बदल देगा!


जंप टू लाइन के साथ, हम वर्तमान निर्देश सूचक को विधि में एक अलग स्थिति में ले जा सकते हैं। निष्पादन को नए स्थान पर लाने के लिए हम तीर को बाईं ओर खींच सकते हैं। ध्यान दें कि यह दोनों दिशाओं में काम करता है, मैं वर्तमान निष्पादन को आगे और पीछे ले जा सकता हूं।


यह कोड को बीच में निष्पादित नहीं करता है, यह सचमुच वर्तमान निर्देश को एक नई स्थिति में ले जाता है। यह बहुत अच्छा है, मुझे इसे फिर से दिखाना है …


यदि आपको कोई बग दिखाई देता है, तो निष्पादन को वापस खींचें और पुन: उत्पन्न करें। आप चर मानों को बदल सकते हैं और समस्या को तब तक दोहरा सकते हैं जब तक कि आप इसे पूरी तरह से समझ नहीं लेते।


हम विफल होने वाले कोड को छोड़ सकते हैं, आदि। यह शानदार है। मुझे कोड को पुन: संकलित करने की आवश्यकता नहीं है। यदि आपके पास कभी ऐसा मामला आया है जहाँ आपने गलती से एक रेखा पार कर ली हो और, “उफ़। मैं ऐसा नहीं चाहता था।"

फिर डीबगर बंद कर दिया और स्क्रैच से शुरू किया। यह आपके लिए प्लगइन है। ऐसा सबके साथ हुआ!


हम केवल निष्पादन को वापस खींच सकते हैं और एक डू-ओवर कर सकते हैं। यह बिल्कुल शानदार है!

आखिरकार

अगले वीडियो में हम घड़ी के बारे में संक्षेप में चर्चा करेंगे। सीरीज के छठे वीडियो में हम इसके बारे में और गहराई से जानेंगे। तो मिले रहें!


यदि आपके कोई प्रश्न हैं, तो कृपया टिप्पणी अनुभाग का उपयोग करें। आपको धन्यवाद!