[? दान ARMADARAS:?] हाय, मैं [हूँ? दान Armadaras?]।
आज, हम करने जा रहे हैं डिबगिंग पर लग जाना।
न केवल हम करने जा रहे हैं कुछ तकनीकों के बारे में बात करते हैं,
लेकिन यह भी हम को देखने के लिए जा रहे हैं सुविधाओं में से कुछ निहित
अनुमति है कि CS50 आईडीई के भीतर आप आसानी से एक कार्यक्रम डिबग करने के लिए।
>> सिर्फ एक उदाहरण गलत हो सकता है कि कुछ
और यह वास्तव में कुछ है हम पहले से ही पहले देखा है कि।
इस मामले में, यह एक सी प्रोग्राम है कि उपयोगकर्ता से एक पूर्णांक स्वीकार
दो से यह बांटता है, और प्रदान करता है उपयोगकर्ता के लिए वापस उत्पादन।
अब हम क्या देखा है से पहले व्याख्यान में,
हम यह वास्तव में पैदा होगा कि पता विभाजन की समस्याओं के विशिष्ट प्रकार
हम विषम संख्या है जब।
>> विशेष रूप से, हम अभी दूर फेंक देंगे दशमलव बिंदु के बाद कुछ भी।
अब, हम इस जानते हैं कि मामले होना होता है।
और हम इसे चलाते हैं, हम पुष्टि कर सकते हैं संकलन द्वारा पहले हमारे संदेह,।
और फिर, चलाकर और एक विषम संख्या में प्रवेश।
>> यह कोई नई बात नहीं है।
लेकिन यह वास्तव में एक है एक बग का उदाहरण है कि
एक बड़ा कार्यक्रम के भीतर मौजूद कर सकते हैं कि नीचे ट्रैक करने के लिए कठिन हो जाता है।
हम क्या मुद्दा पता भले ही , इस मामले का सच जड़ है
की पहचान करने की कोशिश कर रहा हो सकता है विशेष रूप से जहां त्रुटि होती है,
क्या है कि समस्या की पहचान है, और फिर यह तय।
तो एक उदाहरण के रूप में इस प्रदान कुछ हो सकता है क्या की
हम पहले से ही जानते हैं, लेकिन दफन किया जा सकता है कि कोड के अन्य तत्वों के भीतर।
>> तो यह अन्य स्रोत खोलने एक उदाहरण के रूप में कोड फ़ाइल,
इस विभाजन समस्या अब है एक बड़े कार्यक्रम का हिस्सा।
अभी भी एक छोटा हो सकता है सा काल्पनिक है, और हम
आसानी से करने में सक्षम हो सकता है विशेष रूप से, यह पहचान
हम सिर्फ इस पर चर्चा कर रहे है।
लेकिन हम यह है कि यह पता लगाने कर सकते हैं समस्या एक बड़े पैमाने पर मौजूद कर सकते हैं।
>> मैं अब इस संकलन और अगर यह एक अजीब नंबर दर्ज चलाने के लिए,
हम ठीक नहीं मिलता देख सकते हैं कि हम उम्मीद कर सकते हैं कि उत्पादन।
इस विशेष मामले में, हम कह सकते हैं कि हम
संख्या के सभी गणना करना चाहते हैं एक से बढ़कर कुछ विशिष्ट संख्या के लिए।
और हम है कि हम देख सकते हैं मुद्दों की एक किस्म है
हम outputting रहे हैं यहाँ हैं, बस, 0 और एक हम 5 के एक इनपुट प्रदान करते हैं।
>> इसलिए हम पहले से ही जानते हैं कि एक समस्या यहाँ है।
लेकिन हम ठीक पता नहीं हो सकता जहां इस मुद्दे को वास्तव में मौजूद है।
तरीकों में से अब एक ही है कि हम इसे ठीक करने की कोशिश कर सकते हैं
हम है कि कुछ तो है पहले से ही करने के लिए शुरू किया गया।
हम सिर्फ एक बड़े पैमाने पर इसका इस्तेमाल कर सकते हैं।
>> लाइन 14 पर, हमारे पास इस printf समारोह,
जो हमें राज्य से बाहर मुद्रित करने के लिए अनुमति देता है जानकारी के विभिन्न टुकड़ों की।
और यह कुछ ऐसा है कि आप अपने कार्यक्रम के भीतर का लाभ उठाने चाहिए
है कि क्या वास्तव में यह पता लगाने की कोशिश करने के लिए कोड के विभिन्न लाइनों में हो रहा है।
तो यह नहीं है, भले अंतिम उत्पादन है कि हम वास्तव में
से बाहर का उत्पादन करना चाहते हैं इस कार्यक्रम, हम अभी भी
कुछ डिबग हो सकता है बयानों जहां हम
यह पता लगाने की कोशिश कर सकते हैं कि क्या हमारे कोड के अंदर क्या हो रहा है।
>> तो इस मामले में, तो मैं लूंगा डिबग टैग के साथ printf।
इस मामले में, यह है सिर्फ एक डिबग स्ट्रिंग
मैं ऊपर डाल तो यह हो जाता है कि कर रहा हूँ कि मेरे कोड के उत्पादन में बहुत स्पष्ट
क्या यह मैं दिखाने के लिए चाहते हैं।
संख्या में यहाँ और आउटपुट हम अभिकलन किया है।
>> इस मामले में, मैं हो सकता है ठीक जानना चाहते हैं
क्या पहले से हो रहा है और कुछ विशिष्ट गणना के बाद।
तो मैं पहले एक printf का उपयोग हो सकता है और कोड की है कि लाइन के बाद।
इस मामले में, मैं भी कर सकता है यह थोड़ा और अधिक स्पष्ट कर दूं
पहले डिबग कह कर और डिबग इतने के बाद
मैं के साथ अपने आप को भ्रमित नहीं है कि समान लग रही है कि कई लाइनों।
>> अब हम इस और रन कंपाइल यदि यह फिर से पाँच की तरह एक नंबर दर्ज
हम देख सकते हैं कि अब से पहले और बाद उत्पादन
और हम एक स्पष्ट नहीं किया है कि लगता है विभाजन या स्पष्ट संख्या के होने
हम वास्तव में क्या करना चाहते हैं।
अब इस मामले में, यह है नहीं वास्तव में एक स्पष्ट उत्पादन।
यह वास्तव में एक स्पष्ट परिणाम नहीं है कि हम इस विशेष कार्यक्रम से बाहर करना चाहते।
>> और यह एक, फिर से, थोड़ा सा काल्पनिक।
लेकिन, शायद, बातों में से एक यह है कि विनिर्देश ने कहा कि अगर हम कर सकते थे
हम ने इस विभाजित करना चाहते हैं कि 2 और तो दूसरे शब्दों में 1-- जोड़ने,
हम तो up-- पूर्णांक बनाना चाहते हैं हम हम कर सकते थे कि पता कर सकते हैं
इस मामले में, कि विशेष रूप से काम करते हैं।
अब यहाँ हम हम हो जाएगा पता हमारी आधी रह गई संख्या के लिए एक जोड़ने के लिए सक्षम।
>> चलो इस कंपाइल चलो और यह पुष्टि करते हैं कि
हम चाहते हैं कि जिस तरह से बर्ताव कर रही है।
अब हम पहले देख सकते हैं कि रहा है, हम संख्या 5 है।
होने के बाद, हम नंबर 3 है हमारे विनिर्देश के अनुसार, जो
हम क्या करना चाहता है।
लेकिन हम पर नजर डालें तो यहाँ उत्पादन, हम कर सकते हैं
हम एक और हो सकता है कि वहाँ है, जो पूरी तरह बग,
हम 0 से हमारी गिनती शुरू कर रहे हैं।
>> अब फिर से, यह कुछ है हम अतीत में देखा है कि
और हम काफी आसानी से तय कर सकते हैं।
लेकिन इस मामले में, हम यह भी लाभ मिला
printf बयान का उपयोग करने का सीधे पाश के लिए के अंदर
ठीक पता है, जहां उस त्रुटि होने वाली थी।
तो printf बयान कर रहे हैं मदद करने में बहुत उपयोगी
आप जहां निर्धारित करते हैं, ठीक अपने स्रोत कोड में,
एक विशिष्ट त्रुटि हो रहा है।
>> और यह महसूस करने के लिए भी महत्वपूर्ण है कि, हम कोड लिख रहे हैं, के रूप में
हम मान्यताओं हो सकता है एक कार्यक्रम के राज्य के बारे में।
या फिर हम मान्यताओं हो सकता है कार्यक्रम के किस हिस्से के बारे में
वास्तव में सही है या जब गलत है बाद में हम उस कार्यक्रम पर निर्माण के रूप में
और यह एक का हिस्सा बना जटिल और बड़ा कार्यक्रम
हम कुछ पहलू का एहसास है कि कि इस बात का वास्तव में छोटी गाड़ी है।
>> Printf का उपयोग करना वास्तव में मदद कर सकते हैं नीचे संकीर्ण और पहचान
एक कार्यक्रम के क्षेत्रों है कि नहीं हो सकता वास्तव में जिस तरह से बर्ताव किया है कि हम
हमारी मान्यताओं पर आधारित है, उम्मीद है।
लेकिन वहाँ अन्य उपकरण है उपलब्ध है, के रूप में अच्छी तरह से,
कि हमें लगाने की कोशिश करने की अनुमति जहां एक त्रुटि हो रहा है बाहर
और यह भी, विशेष रूप से, क्या बातें कार्यक्रम के अंदर हो रही हैं।
>> इसलिए का उपयोग कर printf बहुत है उपयोगी है जब हम चाहते हैं
के विशिष्ट क्षेत्रों की पहचान करने के लिए कुछ बग है कि एक कार्यक्रम।
लेकिन यह भी हो जाता है एक समय के बाद थकाऊ।
इस मामले में, यह एक है अपेक्षाकृत सरल कार्यक्रम
सिर्फ एक या दो चर के साथ।
और यह हमारे लिए बहुत आसान हो जाता है उन चर के मूल्य प्रिंट आउट
बड़ा कार्यक्रम के संदर्भ में।
>> लेकिन हम एक अलग हो सकता है कई चर है कि कार्यक्रम।
और यह काफी नहीं हो सकता है printf का उपयोग करने के लिए इतना आसान
क्या हो रहा है मूल्यांकन करने की कोशिश करने के लिए उन चर में से हर एक को
कार्यक्रम के रूप में काम कर रही है।
मौजूद है कि एक कार्यक्रम नहीं है एक डिबगर कार्यक्रम बुलाया।
इस मामले में, एक ही है कि हम करेंगे उपयोग करते हैं, GDB जीएनयू डिबगर है, या
कि हमें आंतरिक निरीक्षण करने की अनुमति देता है एक और अधिक में एक कार्यक्रम का कामकाज
विस्तृत तरीके से।
>> हम वास्तव में अमल कर सकते हैं कमांड लाइन से GDB
यहां बस GDB और टाइप करके हम डिबग करना चाहते हैं कि आदेश।
इस मामले में, गिनती।
अब इस मामले में, हम यह देख सकते हैं कि GDB का कहना है कि एक त्वरित करने के लिए हमें लाता है।
और हम वास्तव में कर सकते हैं GDB करने के आदेशों पर अमल
वास्तव में के निष्पादन के शुरू करने के लिए कार्यक्रम के कुछ बिंदुओं पर इसे रोकने,
चर का मूल्यांकन और चर का निरीक्षण कि
कार्यक्रम राज्य में मौजूद उस विशेष पल में,
इत्यादि इत्यादि।
यह हमारे लिए बहुत शक्ति प्रदान करता है।
>> लेकिन यह सिर्फ इतना होता है यह भी कहा कि CS50 आईडीई
एक जीयूआई या एक उपयोगकर्ता प्रदान करता है GDB के लिए इंटरफ़ेस है कि
हमें जरूरत के बिना यह करने के लिए अनुमति देता है जो भी कमांड लाइन इंटरफेस
या बिल्कुल भी।
मुझे लगता है कि उपयोग कर सकते हैं कि जिस तरह से डिबग बटन का उपयोग करना है
CS50 आईडीई के ऊपर से ही।
अब अतीत में, हम क्या है देखा हम आदेश का उपयोग करता है
लाइन संकलन और उसके बाद एक कार्यक्रम को चलाने के लिए।
>> डिबग बटन करता है उन कदमों के दोनों।
लेकिन यह भी लाएगा अभी तक सही पर डिबगर टैब
कि हमें एक किस्म का निरीक्षण करने की अनुमति देता है कार्यक्रम के गुणों की
के रूप में इसे क्रियान्वित किया जाता है।
मैं इस में, डिबग क्लिक करते हैं मामला है, यह लाएगा
कंसोल में एक नया टैब बहुत नीचे खिड़की।
>> और अगर आप इस टैब है कि देख सकते हैं ऊपर से ही कुछ जानकारी।
और हम काफी हद तक इस उपेक्षा कर सकते हैं।
लेकिन चीजों में से एक हम नोटिस करना चाहते हैं कि
यह है कि outputs है एक ही बात है कि हम
हम पर कर भागने की कोशिश की, तो मिल जाएगा टर्मिनल विंडो में सी कार्यक्रम।
>> यहाँ, हम यह बजना चल रहा है देख सकते हैं, और यह झंडे की एक किस्म है,
और यह हमारे count.c फ़ाइल संकलन है जो समय पर चयनित टैब था
कि मैं डिबग मारा।
तो इस वजह से बहुत उपयोगी है अब इस डिबग बटन का उपयोग कर,
हम एक साथ तो संकलन और कर सकते हैं कार्यक्रम पर अमल कि हम वास्तव में
चलाना चाहते हैं।
>> है कि झंडे में से एक महत्वपूर्ण है, इस मामले में,
हम वास्तव में उपयोग किया गया है सबसे लंबे समय के लिए
लेकिन अभी भी कुछ हाथ किया लहराते [सुनाई], जो
यहीं यह एक है।
बजना में, यह -ggdb3 कहते हैं।
इस मामले में, हम क्या कर रहे हैं बजना बता रही है, हमारे संकलक,
हम अपने कार्यक्रम संकलन करने के लिए चाहते हैं।
लेकिन यह भी क्या कर रहे हैं प्रदान करते हैं कहा जाता प्रतीक जानकारी
संकलक वास्तव में पहुँच गया है, तो यह है कि अंतर्निहित जानकारी का एक बहुत कुछ करने के
कार्यक्रम के भीतर निहित।
>> अधिक विशेष रूप से, संख्या मुझे लगता है कि कार्यों की,
उन कार्यों के नाम, चर, प्रकार
उन चर, और एक किस्म है कि डिबगर है कि मदद के लिए अन्य बातों के
इसके संचालन करते हैं।
अब वहाँ कुछ और है उल्लेख है कि महत्वपूर्ण है
जब हम चल चर्चा कर रहे हैं इस रास्ते में एक कार्यक्रम।
>> यह वास्तव में है कि नोटिस हमारे कंसोल में एक नया टैब लाया
नीचे के साथ।
हम अब बातचीत करने के लिए है सीधे टर्मिनल विंडो के साथ।
लेकिन इस नए टैब है वास्तव में एक टर्मिनल विंडो।
यह बस चलाने के लिए विशिष्ट है हम पैदा की है कि कार्यक्रम।
>> में, तल पर सूचना है कि कुछ उत्पादन के साथ संयोजन
संकलक और GDB बजना से, हम काफी हद तक नजरअंदाज कर सकते हैं, जो
यह वास्तव में के उत्पादन से पता चलता है बहुत नीचे हमारे कार्यक्रम।
अब यह महसूस करने के लिए महत्वपूर्ण है कि वास्तव में यह एक खिड़की
आपको दिखाई देगा अपने कार्यक्रम से उत्पादन
लेकिन यह भी इनपुट स्वीकार कर सकते हैं उस प्रोग्राम के लिए, के रूप में अच्छी तरह से।
>> तो कहते हैं कि नोटिस एक संख्या दर्ज करें,
जो हम था कि एक ही उत्पादन है पहले टर्मिनल विंडो में था।
लेकिन यह अब इस नए टैब में दिखाया गया है।
मैं इनपुट एक नंबर कर सकते हैं।
और यह वास्तव में होगा समारोह हम उम्मीद के रूप में
हमें हमारे डिबग दिखा रहा है, उत्पादन, छोटी गाड़ी हो सकता है कि उत्पादन,
के रूप में हम पहले देखा है।
और बहुत नीचे है, यह वास्तव में कुछ अतिरिक्त उत्पादन किया है
सकल घरेलू उत्पाद में से सिर्फ कह रही है कि इस कार्यक्रम पूरा कर लिया है।
>> अब आप इस में देखा था के माध्यम से विशेष रूप से चलाने के लिए,
यह विशेष रूप से नहीं था उपयोगी भी है क्योंकि
हम था, हालांकि डिबगर मेनू आ ऊपर, यह अभी भी चल रहे एक कार्यक्रम था।
कोई बिंदु पर वास्तव में ऐसा किया था हमारे लिए निष्पादन को थामने
सभी के निरीक्षण करने के लिए सक्षम होने के लिए चर के भीतर निहित।
वहाँ कुछ और हम आदेश में क्या करना है कि
हम चाहते हैं कि पहचान करने GDB पाने के लिए कार्यक्रम के निष्पादन को थामने के लिए
और सिर्फ यह आगे बढ़ने की अनुमति नहीं आम तौर पर हम किसी भी अन्य मामले में के रूप में होगा।
>> निष्पादन को थामने के लिए आदेश में, कुछ विशिष्ट लाइन पर,
हम क्या बनाने की जरूरत है एक ब्रेक प्वाइंट कहा जाता है।
और एक ब्रेक प्वाइंट को बहुत आसानी से बनाया जाता है, इस में अपने माउस लेने के द्वारा आईडीई CS50
और बाईं ओर सीधे क्लिक कुछ विशिष्ट लाइन नंबर की।
मुझे लगता है कि एक बार, एक लाल बिंदी जो इंगित करता है, प्रकट होता है
कि कि लाइन अब एक ब्रेक प्वाइंट है।
>> और मैं GDB चलाने अगली बार जब यह कि ब्रेक प्वाइंट पर निष्पादन बंद हो जाएगा
यह कोड की है कि लाइन तक पहुँच जाता है।
अब यह एक महत्वपूर्ण है बात का एहसास करने के लिए
ऐसा नहीं है कि जरूरी मामला यह है कि कोड की हर पंक्ति
वास्तव में पहुँचा जा सकता है।
मैं एक समारोह बना रहे थे, तो यहाँ, example-- शून्य f-- के लिए
और बस नमस्ते here-- एक प्रिंट लाइन करना world-- मैं इस समारोह का फोन कभी नहीं करते हैं, तो
यह मामला होगा कि, मैं यहाँ एक ब्रेक प्वाइंट निर्धारित करते हैं,
समारोह में बुलाया नहीं किया जाएगा।
और इसलिए, इस विशेष ब्रेक प्वाइंट
वास्तव में थामने के लिए कभी नहीं होगा कार्यक्रम के निष्पादन।
>> तो चलो मैं सही ढंग से बना है कि हम कहते हैं कोड के कुछ लाइन पर एक ब्रेक प्वाइंट
कि वास्तव में क्रियान्वित किया जाएगा।
अब इस मामले में, यह है मुख्य समारोह में पहली पंक्ति।
तो यह निश्चित रूप से मामला होगा कि, मैं निष्पादन शुरू के रूप में जल्द ही के रूप में,
बहुत पहले लाइन तक पहुँच जाएगा।
GDB निष्पादन रोक देगा।
और फिर, मैं करने में सक्षम हो जाएगा डिबगर के साथ बातचीत।
>> आप के रूप में कई लाइनों सेट कर सकते हैं अगर आप चाहेंगे, breakpoints।
हम भी एक लाइन बना सकते हैं यहाँ कोड के इस खंड में
कि पहुंचा जा कभी नहीं होगा।
और हम भी आगे नीचे एक सेट कर सकते हैं।
कारण यह है कि हम करेंगे हम करेंगे ऐसा करना चाहते हैं
अधिक एक छोटा सा में जाना बस एक पल में विस्तार।
तो अब के लिए, मुझे बस को निष्क्रिय करते हैं इन अतिरिक्त ब्रेक प्वाइंट
हम क्या होता है पर देख सकते हैं कि इतने मैं एक ही तोड़ दिया है जब
मेरे कार्यक्रम में बिंदु।
मैं बना दिया है कुछ इस कार्यक्रम में परिवर्तन।
इसलिए मैं इसे बचाने की जरूरत है।
मैं डिबग क्लिक करेंगे मैं कर सकता हूँ तो यह है कि संकलन शुरू हो और फिर
डिबगर के निष्पादन।
>> हम देखेंगे कि, क्षणों के बाद हम ब्रेक के रूप में चयनित किया है कि लाइन
बिंदु पीले रंग में प्रकाश डाला है।
हम भी सूचना है कि कर सकते हैं डिबग पैनल में ऊपरी दाहिने
ठहराव आइकन बदल गया है एक छोटे से खेलने आइकन में।
यह हम ठहराव का मतलब है कि निष्पादन, इस विशेष मामले में।
और खेलने के बटन होता मार हमें निष्पादन को फिर से शुरू करने की अनुमति
कि विशिष्ट बिंदु पर।
>> अन्य की एक जोड़ी है कि नोटिस इस डिबग पैनल में उपलब्ध बटन,
भी।
के लिए मुझे अनुमति देता है, पर कदम कोड की है कि एक लाइन पर अमल
और करने के लिए है कि रेखा को खत्म करने के लिए कदम इस मामले में अगले एक है, जो,
printf मतलब यह होगा कि बयान मार डाला है।
और यह तो रुकेगा जैसे इतना लाइन 13 पर निष्पादन,।
>> और यह भी एक कदम भी नहीं है समारोह में जो
मैं दूसरे बनाया है तो यह उपयोगी है कहीं और स्रोत कोड में कार्य करता है।
और मैं में कदम चाहते हैं उन कार्यों के बजाय
एक पूरे के रूप में है कि समारोह निष्पादित।
लेकिन हम कदम पर अधिक गौर करेंगे बस एक पल में समारोह में।
अब कुछ अन्य बातों पर ध्यान कि वास्तव में इस डिबग पैनल के भीतर मौजूद हैं।
>> हम इस पैनल कहा जाता है जो हमें पता चलता है, ढेर फोन
वास्तव में हम कहां हैं।
इस मामले में, हम अंदर हैं मुख्य समारोह का।
हमारी स्क्रिप्ट count.c कहा जाता है।
और हम पर होना होगा 13 लाइन, स्तंभ से एक है, जो
क्या प्रकाश डाला क्षेत्र ठीक है स्रोत कोड के रूप में अच्छी तरह से, इंगित करता है।
>> अब यह भी पता चलता है कि नोटिस स्थानीय चर धारा के तहत
चर के सभी कि इस समारोह के भीतर मौजूद हैं।
यह नोट करना महत्वपूर्ण है चर के सभी कि
इस स्थानीय चर में दिखाई देंगे एक समारोह के भीतर अनुभाग,
यहां तक ​​कि वे परिभाषित कर रहे हैं पहले।
हम एक चर है कि यहाँ देख सकते हैं NUM कहा जाता है, 0 से डिफ़ॉल्ट मान है,
और यह int प्रकार की है।
>> अब हम वास्तव में को प्रारंभ करने से पहले इन चर के सभी,
हम जरूरी नहीं रहे 0 के एक मूल्य देखने के लिए गारंटी।
और दूसरी फांसी पर निर्भर करता है आप प्रदर्शन किया है कि
और अपनी याददाश्त में जब से राज्य आप वास्तव में इस कार्यक्रम को चलाने,
क्या आप पाते हैं कि हो सकता है 0 के मूल्यों को नहीं दिख रहा है
और, इसके बजाय, कुछ अन्य पागल संख्या।
>> लेकिन उस के बारे में चिंता मत करो।
जब तक यह प्रासंगिक नहीं किया जा रहा है आप वास्तव में मूल्य को प्रारंभ।
अब इस मामले में, हम देख सकते हैं कि मैं कुछ outputs प्रदर्शन किया है।
और मैं अब ठीक है, निष्पादन रुका हुआ हूँ।
लेकिन इस मामले में, क्या मैं वास्तव में क्या करना चाहते हैं
अब इस लाइन पर कदम है कोड की इसलिए मैं वास्तव में यह कर सकते हैं कि
कि पूर्णांक के लिए उपयोगकर्ता क्वेरी कि हम अपने कार्यक्रम में उपयोग करना चाहते हैं।
>> अब इस मामले में, जब मैं नोटिस पर कदम मारा
कि बजाय रोकें या फिर से शुरू बटन इस रोकें बटन करने के लिए बदल गया है
इस कोड को वास्तव में निष्पादित कर रहा है क्योंकि।
क्या हो रहा है अभी यह है कि
निवेश करने के लिए हमारे लिए कुछ जानकारी इंतजार कर हम अपने उत्पादन पाठ को देख सकते हैं
बहुत नीचे।
>> इसलिए अभी, यह है वास्तव में रुका हुआ नहीं,
यहां तक ​​कि यह हालांकि, की तरह दिखाई देता है, कुछ भी नहीं हो रहा है, क्योंकि हो सकता है।
लेकिन यह सिर्फ इतना होता है कि में 13 लाइन पर अपना विशिष्ट मामले,
मैं उपयोगकर्ता इनपुट के लिए इंतज़ार कर रहा हूँ।
और तो GDB का निरीक्षण करने में सक्षम नहीं है यह रूप में एक कार्यक्रम चल रहा है।
>> मैं कुछ दर्ज है कि अब अगली बार input-- इसलिए मुझे लगता है कि नंबर 5 में प्रवेश करेंगे
हम में देखा है हिट वापसी past--, और हम
कि, तुरंत GDB विराम देता नोटिस और, फिर से, अगली पंक्ति पर प्रकाश डाला गया।
लेकिन एक के रूप में, अब है कि नोटिस हमारे एक मूल्य inputting का परिणाम है,
हम अंदर है कि मूल्य को अद्यतन किया है हमारे स्थानीय चर, जो
ठीक पता करने के लिए बहुत उपयोगी है क्या है कि संख्या स्मृति में किया गया था।
>> अब मैं इस कार्यक्रम को जारी रखने की अनुमति दे सकते हैं इसके निष्पादन के अंत तक खेल रहे हैं
फिर से शुरू मार से।
हम बहुत जल्दी से देख सकते हैं कि कार्यक्रम खत्म क्रियान्वित करता है
एक ही उत्पादन के साथ कि हम पहले था, डिबगर बंद कर देता है,
और अब इस कार्यक्रम पूरी तरह से बंद कर दिया है।
>> मैं दिखाने के लिए ही है कि देखने का प्रयोजनों क्या
हम वास्तव में फिर से शुरू मारा जब ऐसा होता है।
लेकिन हम वास्तव में करने के लिए जा रहे हैं इस कार्यक्रम में वापस जाना चाहता हूँ
हम डिबग करने की कोशिश कर सकते हैं ताकि ठीक क्या हो रहा है।
मैं डिबगर का उपयोग कर रहा हूँ कि अब, मैं हो सकता है इन डिबग printf बयान की जरूरत नहीं।
>> मुझे क्या करना होगा के रूप में तो मैं उन्हें हटा सकता है अब सिर्फ हमारे सरल कोड के लिए वापस जाने के लिए
हम एक पल पहले था।
अब मैं जब बचाने के लिए कार्यक्रम है और इसे अमल,
यह, फिर से, कि प्रारंभिक के लिए जाना जाएगा मैं लाइन 11 पर था उस बिंदु को तोड़ने।
और मैं निरीक्षण करने के लिए सक्षम हो जाएगा अपने चर मैं करना चाहता है के रूप में।
>> यह सिर्फ इतना है कि यह है कि क्या होता है हिस्सा है, बहुत दिलचस्प नहीं है
और मुझे लगता है कि मैं जा रहा हूँ पता है कि इस बयान के बाहर मुद्रित करने के लिए।
एक संख्या दर्ज करें।
और फिर, मैं मैं जा रहा हूँ पता है कि कि पूर्णांक के लिए उपयोगकर्ता पूछने के लिए।
तो शायद, मैं वास्तव में ले जाना चाहते हैं मेरी नीचे थोड़ा सा आगे बिंदु को तोड़ने।
>> आप ब्रेक प्वाइंट को हटा सकते हैं सीधे, फिर से, क्लिक करके
कि लाइन नंबर के बाईं ओर।
यही कारण है कि लाल बिंदी का संकेत है, गायब हो जाएगा कि ब्रेक प्वाइंट अब चला गया है कि।
अब इस मामले में, निष्पादन रोक दिया गया है।
और इसलिए यह वास्तव में करने के लिए नहीं जा रहा है उस विशेष उदाहरण में फिर से शुरू।
लेकिन मैं एक ब्रेक सेट कर सकते हैं एक छोटा सा बाद में इशारा करते हैं।
>> और अब मैं फिर से शुरू जब मेरी कोड, इसे फिर से शुरू और बताना होगा
कि ब्रेक प्वाइंट के बिंदु।
फिर से, मैं फिर से शुरू मारा।
कुछ भी हो रहा है, ऐसा लगता नहीं है।
लेकिन यह है कि मेरी वजह से कोड इनपुट के लिए इंतज़ार कर रही है।
मैं एक नंबर 5 में प्रवेश हिट दर्ज करेंगे, और अब अगले ब्रेक प्वाइंट हिट हो जाएगा।
>> अब इस मामले में, इस कोड की लाइन है
कि, पहले, हमें पता था छोटी गाड़ी हो हुआ।
तो क्या होता है का मूल्यांकन करते हैं समय में इस खास बिंदु पर।
एक लाइन पर प्रकाश डाला जाता है, तो इस लाइन अभी तक निष्पादित नहीं किया गया है।
तो इस मामले में, हम देख सकते हैं मैं एक संख्या है, कि जो
मैंने कहा जाता है एक पूर्णांक है एक मूल्य के 5 है कि गिन।
और मैं प्रदर्शन किया जा रहा हूँ उस नंबर पर कुछ गणित।
>> मैं उस पर कदम है, हम कर सकते हैं NUM के लिए है कि मूल्य को नोटिस
के अनुसार बदल गया है हम वास्तव में किया है कि अंकगणित।
और अब हम कर रहे हैं कि अंदर पाश के लिए इस बात का
या अब कि पाश के लिए अपने आप पर प्रकाश डाला है,
हम एक नया देखना है कि चर कि मैंने फोन
पाश के लिए है कि में इस्तेमाल किया जा रहा है।
>> अब जब कि मैं पहले याद कभी कभी आप कर रहे हैं उल्लेख किया है कि
पागल की किसी तरह देखने के लिए जा रहा उस नंबर से पहले डिफ़ॉल्ट रूप में संख्या
या कि चर रहा है वास्तव में initialized।
हम ठीक है कि देख सकते हैं यहाँ इस चर में
जो नहीं किया, मैंने फोन अभी तक प्रारंभ किया गया
उजागर करने का समय।
लेकिन हम इसे कुछ संख्या है कि देख सकते हैं हम वास्तव में उम्मीद नहीं की होगी कि।
>> ठीक है।
इसके बारे में चिंता मत करो हम वास्तव में नहीं है, क्योंकि
मैं जब तक कि नंबर initialized इस लाइन और मूल्य पर कदम
मैं मान 1 करने के लिए प्रारंभ की गई है।
तो यह है कि वास्तव में है कि देखने के लिए मामला है, पर कदम चलो।
अब हम देख सकते हैं कि कि लाइन निष्पादित किया गया है।
और हम अब उजागर कर रहे हैं इस printf लाइन।
>> और अब हम कैसे हमारे मूल्यों को देख सकते हैं की मैं और 3 समय के साथ बदल गया है।
यह वास्तव में, ऐसा करने के लिए बहुत उपयोगी है, बार-बार लाइनों पर कदम रखने की है।
और तुम क्या वास्तव में प्राप्त कर सकते हैं आपके लिए लूप के अंदर होता है
और क्या होता है अंदर पाश के लिए इस बात का चर
कि कार्यक्रम के क्रियान्वयन के रूप में एक समय में एक कदम होता है।
>> अब इस बिंदु पर, मैं अभी पर्याप्त पर कदम रखा
अब मैं अपने कार्यक्रम के अंत में हूँ।
मैं उस पर कदम हैं, तो यह होगा वास्तव में निष्पादन के लिए संघर्ष
हम अतीत में देखा है।
तो, मुझे एक बार फिर, यह पुनः आरंभ करते हैं मैं कुछ और ही बात कर सकते हैं कि,
भी।
>> इस मामले में, यह है अब फिर से, मुझे पूछ रही है,
एक नंबर के लिए जो मैं, फिर से, में प्रवेश करेंगे।
लेकिन इस बार, मैं में प्रवेश करने के लिए जा रहा हूँ एक बड़ी संख्या इतनी है कि पाश के लिए
अधिक बार पुनरावृति होगी।
इस मामले में, मैं जा रहा हूँ 11 में से एक मान दर्ज करने के लिए।
>> अब मैं फिर से निर्धारित था क्योंकि लाइन 15 पर एक ब्रेक प्वाइंट,
यह है कि लाइन पर प्रकाश डाला जा रहा है।
हम देख सकते हैं कि हमारे 11 नंबर सही ढंग से है
हमारे स्थानीय चर में प्रतिनिधित्व किया।
हम अब, उस पर कर सकते हैं कदम मैं के बारे में हमारी मूल्य के लिए देखो क्या होता है
हम पाश के लिए इस के अंदर आगे बढ़ना है।
यह हर बार हम incremented हो जाता है पाश के लिए उस के शीर्ष तक पहुँचने।
>> चीजों में से एक अब जब कि हो सकता है निष्पादन के दौरान आपके पास करने के लिए उपयोगी हो सकता है
इस कार्यक्रम के लिए वास्तव में मेरे लिए है देखने के लिए चर मझधार बदल
क्या अपने कार्यक्रम के लिए होता है।
इस मामले में, मैं वास्तव में यह कर सकते हैं डबल मूल्य पर क्लिक करें।
यह एक पाठ क्षेत्र बन जाता है कि नोटिस।
>> अब मैं अलग प्रवेश कर सकते हैं कुल मिलाकर मूल्य
मेरे प्रोग्राम कैसे बर्ताव देखने के लिए मुझे लगता है कि चर बदल दिया है।
अब इस मामले में, चर मैं अब मूल्य 10 शामिल हैं।
लेकिन कार्यक्रम अभी भी है निष्पादन में रुका हुआ है।
मैं पर कदम है, मैं देखना है कि मैं 10 के रूप में दर्ज है, जो मूल्य मुझे लगता है,
, संख्या के मान से अधिक नहीं है जो तुरंत पाश के लिए कारण बनता है
को क्रियान्वित करने से रोकने के लिए।
>> अब जब कि केवल नहीं है कारण तुम क्यों करेगा
जगह में चर को संशोधित करने के लिए चाहते हैं।
आप वास्तव में चाहते हो सकता है यह तो संशोधित करने की कोशिश करने के लिए
आप जारी रख सकते हैं एक पाश के निष्पादन
या तो यह है कि आप संशोधित कर सकते हैं यह पहले कुछ मूल्य
गणित के कुछ विशिष्ट सेट तक पहुँचता है तुम प्रदर्शन करने के बारे में हैं।
>> तो अब हम वास्तव में है कि परिवर्तन कार्यक्रम के रूप में मैं के मूल्य को क्रियान्वित किया गया था,
यह पाश के लिए छोड़ने की वजह से समय से पहले मैं, अचानक, क्योंकि
मूल्य से अधिक होने का क्या हुआ NUM की, पाश के लिए है कि जिसका अर्थ है कि
अब कोई निष्पादित करने की जरूरत है।
इसके अलावा, यह होने का क्या हुआ हम मैं के मूल्य बदल गया है कि मामले
लाइन 17 पर प्रकाश डाला गया था, समय में बिंदु था जो
कि पाश निष्पादन के लिए वास्तव में मूल्यांकन किया जा रहा था।
>> मैं मूल्य का बदला था तो मैं एक अलग लाइन पर, 19 का कहना है
हम अलग अलग देखा होगा व्यवहार लाइन 19 होगा क्योंकि
पाश से पहले मार डाला है हालत संघर्ष शुरू किया गया था।
अब इस बिंदु पर, मैं कर रहा हूँ, फिर से, इस कार्यक्रम के अंत में।
और मैं इस पर आगे बढ़ने की अनुमति दे सकते हैं मेरे कार्यक्रम स्वाभाविक रूप से पद छोड़ने की अनुमति देते हैं।
लेकिन चीजों की एक जोड़ी है दूर लेने के लिए महत्वपूर्ण हैं कि
इस विशेष चर्चा से।
आप का मूल्यांकन करने की जरूरत है अपने ही मान्यताओं
के बारे में कैसे कोड से बर्ताव किया जाना चाहिए।
किसी भी समय आप कुछ टुकड़ा लगता है कि आप जानते हैं कि कोड काम करने के लिए होता है की,
कि जाने के लिए एक लाल झंडा हो सकता है पीठ और मूल्यांकन, और यह सुनिश्चित हो
की अपनी धारणा है कि कैसे है कि कोड काम कर रहा है
यह कैसे होता है करने के लिए वास्तव में सच है अपने स्रोत कोड में व्यक्त किया।
>> लेकिन बात करने के लिए और भी अधिक था, हम डिबगर का उपयोग कर रहे हैं,
आप पर ब्रेकप्वाइंट डाल सकते हैं कोड के विभिन्न लाइनों,
करने के लिए डिबगर कारण होगा जो उन पंक्तियों में से प्रत्येक में निष्पादन को थामने
इसलिए आप का मूल्यांकन कर सकते हैं कि स्मृति या यहां तक ​​कि यह जगह में बदल जाते हैं।
और फिर, आप कर सकते हैं कि याद कई ब्रेकप्वाइंट बनाने के लिए इतना है कि आप
यह भी निष्पादन को फिर से शुरू कर सकते हैं, को छोड़ कोड के बड़े हिस्से से अधिक है,
और यह स्वचालित रूप से रोक देंगे अगले ब्रेक के बिंदु पर।
>> वास्तव में और अधिक उन्नत नहीं है डिबगर की सुविधाओं, के रूप में अच्छी तरह से।
लेकिन हम आप का उल्लेख करना होगा कुछ बाद वीडियो
वास्तव में कैसे अलग तंग करने के क्रम में विशेष रूप से उन कार्यों का उपयोग करने के लिए।
अभी के लिए, धन्यवाद देखने के लिए बहुत ज्यादा।
और अच्छी किस्मत डिबगिंग।