स्कूल डिबगर्स को कवर क्यों नहीं करते हैं? [बन्द है]


12

एसओ पर एक और होमवर्क प्रश्न के बाद । ऐसा लगता है कि छात्रों के विशाल बहुमत को पता नहीं है कि डिबगर क्या है या किसी का उपयोग कैसे करना है। मुझे लगता है कि डिबगर का उपयोग करना जानना लगभग अन्य प्रोग्रामिंग के मूल रूप में महत्वपूर्ण है।

  • सवाल डिबगिंग नहीं है और प्रोग्रामिंग डिबेंचर के साथ-साथ आधुनिक डिबगिंग टूल का उपयोग कैसे किया जाए? यदि नहीं तो क्यों नहीं।

2
Erm .. आप कह रहे हैं gdb एक आधुनिक डिबगिंग टूल है? यह एक बुरा डिबगर नहीं है, लेकिन यह निश्चित रूप से कला की स्थिति नहीं है।
बिली ओनली

1
मैं सहमत हूँ लेकिन मैंने यह भी सवाल का जवाब दिया है कि छात्र दृश्य स्टूडियो का उपयोग करते थे और यह नहीं जानते थे कि वे डिबगर का उपयोग कैसे या क्यों करेंगे।
जूनुन

@ श्रुण: अर्म .. ouch। वे IDE पर "खेल" बटन नहीं मार सकते हैं? (BTW, I + 1'd)
बिली ओनली

system.out प्रिंट लॉगिंग आलसी और अयोग्य का अंतिम गढ़ है

6
@Jarrod, एक बहुत व्यापक सामान्यीकरण और शायद पीढ़ी ऐसा। कभी-कभी आप अपने प्रोग्राम पर डिबगर का उपयोग नहीं कर सकते हैं जहां समस्या होती है।

जवाबों:


7

यह इतना मामला नहीं है कि डिबगर्स के उपयोग को सिखाया जाना चाहिए, लेकिन डिबगिंग की अधिक सामान्य तकनीक । इसमें शिक्षण को शामिल करना होगा कि कैसे डिबगर का उपयोग किया जाए, लेकिन विभिन्न अन्य महत्वपूर्ण तकनीकों को भी शामिल किया जाएगा

  • गहन सोच
  • विभाजन और जीत
  • प्रिंटफ डीबगिंग, लॉगिंग, आदि
  • डेस्क की जाँच
  • तनाव परीक्षण

अतिरिक्त लाभ के रूप में, कई तकनीकों को प्रोग्रामिंग के अलावा अन्य क्षेत्रों में समस्या-समाधान के लिए भी लागू किया जा सकता है।

इस पूरे विषय पर एक अच्छी पुस्तक है, जिसे संभवतः सभी अंडरग्रेजुएट और किसी को प्रोग्रामिंग की मूल बातें सीखने के लिए पढ़ना चाहिए: डेविड जे अगन्स द्वारा डीबगिंग


8

तृतीयक कंप्यूटर विज्ञान पाठ्यक्रम छात्रों को प्रोग्रामिंग की बुनियादी बातों को सिखाने के लिए अनुकूल हैं , जैसा कि आपने उल्लेख किया है - इन अवधारणाओं को छात्रों को इस उम्मीद में पढ़ाया जाता है कि वे आवश्यक अवधारणाओं को प्राप्त करेंगे और इसे प्रोग्रामिंग भाषाओं और समस्या सेटों की एक विस्तृत श्रृंखला में लागू करेंगे।

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


3
+1। अनुवादित: क्योंकि हर कोई MSVS, GCC / GDB, LLVM / CLANG, आदि का उपयोग नहीं करता है
Billy ONeal

1
+1 हालांकि मुझे मानना ​​होगा कि मैं @rerun से सहमत हूं; एक कोर्स (या एक का हिस्सा) जो बुनियादी अवधारणाओं और उपकरणों पर जाता है जो एक सॉफ्टवेयर शॉप में उपयोग किए जाते हैं, नए स्नातकों को उत्पादक बनाने की दिशा में एक लंबा रास्ता तय करेंगे। मैंने कई बार चलाया है कि कुछ समय के लिए उपयोग करने के बाद भी स्रोत नियंत्रण को समझने के लिए प्रतीत नहीं हुआ।
केन हेंडरसन

कई कौशल जो औसत डेवलपर्स स्कूल में शामिल किए गए हैं, वहां से बहुत समय बिताते हैं। स्रोत नियंत्रण, सामान्य रूप से कॉन्फ़िगरेशन प्रबंधन, कोड अन्वेषण, कोड रीडिंग, बिल्ड प्रोसेस आदि आदि। जबकि मैं समझता हूं कि सीएस डिग्री को सैद्धांतिक पहलुओं को शामिल करने की आवश्यकता है, जो मुझे लगता है कि एक वरिष्ठ स्तर का वर्ग है जहां छात्रों ने एक बड़े मौजूदा कोड बेस के साथ काम किया और बग्स को ठीक किया। और इसे कोड में जांचा जाता है और "तैनात" एक नए डेवलपर को बहुत अधिक उपयोगी बना देगा।
जूनुन

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

2
डिबगर का उपयोग करके यह समझने की आवश्यकता है कि कंप्यूटर कैसे काम करता है, न कि केवल कोड। मैं इसे एक प्रोग्रामिंग मौलिक मानता हूँ । मैंने बहुत से छात्रों का सामना किया है, जिन्हें अभी पता नहीं है कि उनका कंप्यूटर वास्तव में क्या कर रहा है, और यह एक अच्छे प्रोग्रामर के लिए नहीं है।
eda-qa mort-ora-y

2

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


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

2
@ गलत कोड के माध्यम से कदम रखने से किसी तरह उनकी मदद हो रही है?
नील बटरवर्थ

1
@ बिली ओनली, तुम गलत हो। एक डिबगर जिसके बारे में आप बात कर रहे हैं वह मौजूद नहीं है। जब आप पहले से ही डिबग लॉगिंग के साथ समस्या की पहचान कर चुके हैं, तो प्रोग्राम के माध्यम से इंटरएक्टिव कदम केवल उपयोगी है। मेरे अभ्यास में कभी नहीं (> 20yrs) मुझे अपने कोड के साथ डिबगर का उपयोग करना पड़ा - उचित अभिकथन और लॉगिंग हमेशा पर्याप्त थी। मैं केवल पुस्तकालयों कोड और विरासत सामान के साथ उस शापित उपकरण का उपयोग कर रहा हूं। और, btw।, किसी भी डेटा संरचना को किसी पठनीय में अनुक्रमित करने में सक्षम होना हमेशा एक अच्छा विचार है। कुछ भाषाएं / वातावरण इसे मुफ्त में देते हैं।
तर्क

1
@ बिली ओनली, आप एक सीरियल पोर्ट से जुड़ी एक माइक्रोकंट्रोलर डिवाइस की मेमोरी को कैसे ब्राउज़ करेंगे? और, मेरा मानना ​​है कि डेटा संरचनाओं और एल्गोरिदम में पर्याप्त रूप से साक्षर होने से पहले फ्रेशर्स को निम्न स्तर की भाषाओं और सामान के साथ फ्रेशर्स को उजागर करना इतना अच्छा विचार नहीं है। तब तक वे ठीक से डिबग करना जानते हैं।
तर्क

1
@ बिली ओनली, सबसे कठिन हिस्सा सही क्षण की पहचान करने में होता है जब या तो डिबग (btw) में एक मूल्य का निरीक्षण किया जाता है, ज्यादातर मामलों में यह अभी भी एक .dump () पद्धति को कॉल करने जैसा है, न कि प्रत्यक्ष मेमोरी निरीक्षण या। क्रमबद्ध मान को मुद्रित करने के लिए। जगह में एक उचित डिबग लॉगिंग बुनियादी ढांचे के साथ समस्या लॉग फ़ाइलों के विश्लेषण के लिए नीचे संकुचित है। ज्यादातर मामलों में एक साधारण grepकाम करता है। कोई कदम नहीं, कोई सशर्त ब्रेकप्वाइंट नहीं - बस grep।
एसके-तर्क

2

यह इतना महत्वपूर्ण नहीं है। मैं लगभग कभी भी एक का उपयोग नहीं करता, और कभी नहीं करता। कोड डिबग करने का सबसे अच्छा तरीका है:

  • पहली जगह में कीड़े मत लिखो
  • यदि आप उन्हें लिखते हैं, तो उन्हें डिबगर में डाइविंग करके नहीं, सोचकर ठीक करें

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


6
मुझे लगता है कि यह निर्भर करता है। यदि आप एक बड़े और खराब दस्तावेज़ वाले कोडबेस के व्यवहार के लिए उपयोग होने की कोशिश कर रहे हैं जो आपने नहीं लिखा है, तो एक डीबगर सबसे तेज़ तरीकों में से एक है जो कोडबेस क्या कर रहा है, से परिचित होने के लिए है। यदि आप सभी कोड लिख रहे हैं, तो निश्चित रूप से, आपको अक्सर डिबगर की आवश्यकता नहीं होगी, लेकिन हम सभी उस स्थान पर नहीं हैं। +1
बिली ओनल

1
@ बिली हमें अलग से सहमत होना चाहिए। आप डिबगर के साथ एक विशाल एमटी ट्रेडिंग सर्वर जानने की कोशिश कर रहे हैं।
नील बटरवर्थ

@ नील: मैंने कभी भी व्यक्तिगत रूप से उस तरह की बात नहीं की है ... लेकिन मैंने बिना किसी समस्या के पहले एमटी कोड डिबग किया है। शायद मैं MSVC ++ से खराब हो गया हूं - वहां के डिबगर्स यह दिखाते हैं कि विभिन्न धागे वास्तव में आसान क्या कर रहे हैं। लेकिन अगर मैं 2008 से पहले के संस्करणों में डिबगिंग कर रहा था (मुझे लगता है कि जब वह जोड़ा गया था) तो मैं देख सकता था कि कैसे चीजें और अधिक कठिन बना सकती हैं।
बिली ओनली

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

2
मुझे पता है कि तुम इधर-उधर प्राप्त ज्ञान के चेहरे को उड़ा रहे हो। लेकिन आप लिनस टोरवाल्ड्स, लैरी वॉल, ब्रायन कर्निघन और रॉब पाइक जैसे लोगों के साथ अच्छी कंपनी में हैं।
btilly

0

डिबगिंग सिखाई जानी चाहिए क्योंकि छात्र मनुष्य हैं और मनुष्य सभी प्रकार की गलतियाँ करते हैं, जिनमें से कुछ में किसी दिए गए गलती के बारे में किसी भी ज्ञान से पहले कुछ प्रयोगात्मक डेटा (डीबगिंग जानकारी) प्राप्त करने की आवश्यकता होती है।

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


हम्म .. शायद मेरा स्कूल बस अलग है, लेकिन यह नहीं है कि सीडब्ल्यूआरयू में चीजें कैसे होती हैं।
बिली ओनेल

संभवतः प्रश्न में प्रोग्रामिंग पाठ्यक्रम के ऐतिहासिक विभाग वंशानुक्रम वृक्ष पर निर्भर करता है।
हॉटपावर 2

मुझे यकीन नहीं है कि आपको यह सब कहां मिल रहा है। सभी परिचयात्मक वर्ग बग को ट्रैक करने के तरीके पर कुछ व्याख्यान देते हैं।
davidk01

@ davidk01 - यह ओपी के अवलोकन की व्याख्या नहीं करता है, जो मैंने सुना है, अक्सर नहीं, लेकिन पहले से अधिक बार।
हॉटपावर 2

@ hotpaw2: ओपी के अवलोकन को क्या नहीं समझाता है? सिर्फ इसलिए कि छात्रों को डिबग कार्यक्रमों को सीखने में कठिन समय लगता है इसका मतलब यह नहीं है कि यह सिखाया नहीं जाता है कि आप किस निष्कर्ष पर जा रहे हैं। मैंने एक स्नातक छात्र और एक स्नातक छात्र के रूप में कई प्रोग्रामिंग पाठ्यक्रम लिए हैं। हर वर्ग में प्रशिक्षक ने कम से कम एक व्याख्यान गलत कार्यक्रम पर जाने और कुछ सामान्य डिबगिंग तकनीकों को प्रदर्शित करने के लिए इसे ठीक करने के लिए खर्च किया है।
davidk01

0

यह सवाल मेरे लिए विदेशी है। मेरे विश्वविद्यालय में डीबगर (जेडीबी और एक्लिप्स डीबगर) के उपयोग को प्रथम वर्ष के कंप्यूटर विज्ञान अनुक्रम के रूप में शुरू में सिखाया गया था। सॉफ़्टवेयर परीक्षण पर डिबगर्स और अन्य परीक्षण उपकरणों के उपयोग को पाठ्यक्रम में फिर से पढ़ाया गया।

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


0

यह अपने आप बाहर चित्रा

मुझे जरूरत नहीं थी और मैं एक प्रोफेसर या टीए नहीं चाहता था कि मुझे कुछ सिखाने में समय लगे जो मैं आसानी से अपने दम पर समझ सकता हूं। वे मुझे कठिन अवधारणाओं और सीखने की मार्गदर्शिका सिखाने के लिए हैं। वे नहीं हैं और आप आरटीएफएम के लिए नहीं है तो वहाँ नहीं होना चाहिए

जानें कैसे सीखें

कॉलेज को सीखने के बारे में होना चाहिए, न कि आपके हाथ में हर विषय के माध्यम से जो आप नहीं जानते। यदि आपके पास इस प्रक्रिया के माध्यम से लगातार आपका हाथ है, तो आप वास्तविक दुनिया में बुरी तरह से विफल हो जाएंगे।

बर्फ के माध्यम से यूफिल, दोनों तरीके

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.