असली प्रोग्रामर डिबगर्स का उपयोग करते हैं? [बन्द है]


15

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


14
यह पूछने की तरह है कि क्या अनुभवी प्रोग्रामर कीबोर्ड का उपयोग कर रहे हैं ... मुझे समझ नहीं आ रहा है कि इसके साथ क्या अनुभव है - क्या आपको लगता है कि वे भगवान हैं और शुरुआत से ही त्रुटियों के बिना एकदम सही काम कर रहे हैं? और यहां तक ​​कि अगर आपके लिए इसका क्या मतलब है - क्या आपको ज़रूरत पड़ने पर डिब्यूजर का उपयोग करना बंद कर दिया जाएगा और स्टार कहेगा: "मैं डिबगर का उपयोग नहीं करता हूं इसलिए मैं रीमा प्रोग्रामर हूं" ... :) बीटीडब्ल्यू। मुझे शक है कि कोई भी पेशेवर इस तरह के सवाल का जवाब देगा ...

3
@Wooble: मूल प्रश्न "अनुभवी प्रोग्रामर डिबगर्स का उपयोग करते हैं" एक अच्छा है। यह वास्तव में मुझे आश्चर्यचकित करता है कि इसने एक मिनी पवित्र युद्ध की स्थापना की।
केविन

19
वास्तविक प्रोग्रामर, निश्चित रूप से, तितलियों का
रीइन हेनरिक्स

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

7
अनुभवी प्रोग्रामर जो "डीबगर्स का उपयोग नहीं करते हैं" शायद gdb / SoftICE के संदर्भ में सोच रहे हैं, और उन्होंने कभी वास्तविक एकीकृत-डिबगर का उपयोग नहीं किया है (और शायद उस मामले के लिए आईडीई का उपयोग नहीं करते हैं)। वे दर्द के समय से बहुत पीछे हैं।
ब्लूराजा - डैनी पफ्लुगुएफ्ट

जवाबों:


44

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


30
अजीब तो यह है कि कोडांतरक, फोरट्रान, सी, सी ++ आदि आदि में 30 से अधिक वर्षों की प्रोग्रामिंग के बाद मुझे एक का उपयोग करने की कोई इच्छा नहीं है।

59
लंबे समय तक कुछ करना जरूरी नहीं है कि आप इसे अच्छा बना सकें।
सिजॉयज

31
डिबगर का उपयोग न कर पाना अनुभवहीनता की निशानी है। सिर्फ पढ़ने के कोड द्वारा एक कार्यक्रम के प्रवाह को समझना नहीं है। बेशक, अनुभवी प्रोग्रामर को एक बार डिबगर की आवश्यकता होगी, लेकिन अगर आप कोड पढ़ सकते हैं, तो कोई आवश्यकता नहीं है, और यह किसी भी तेजी से डिबगिंग की प्रक्रिया को नहीं बनाएगा।
गोलेज़ट्रॉल

10
@ कार्ल बेवेलफेल्ट: मुझे उन प्रोग्रामर्स के प्रसिद्ध उदाहरणों के एक जोड़े का नाम बताइए जो डीबगिंग के लिए डीबगर्स का उपयोग नहीं करते हैं। लाइनस टॉर्वाल्ड्स, लिनक्स के लेखक। लैरी वॉल, पर्ल के लेखक। आपके लिए जटिल पर्याप्त सॉफ्टवेयर?
btilly

9
@ नील: आपका कितना समय आप अपने कोड पर काम करने में बिताते हैं, और अन्य लोगों द्वारा लिखे गए कोड को कितना बनाए रखते हैं? और विशेष रूप से, अन्य लोगों द्वारा लिखे गए कोड को कितना बनाए रखना चाहिए, जो किसी प्रोग्रामिंग भाषा के पास कभी भी अनुमति नहीं होनी चाहिए?
कार्सन 63000

28

मैं अक्सर डिबगर का उपयोग करता हूं, क्योंकि मैं एक बड़ी प्रणाली पर काम करता हूं और इसलिए मैं चूसता हूं। http://steve-yegge.blogspot.com/2007/06/rich-programmer-food.html

आपका कोड कितना छोटा और बार-बार पढ़ा जाता है, इस बात की संभावना हमेशा रहती है कि उसमें कीड़े हों। http://googleresearch.blogspot.com/2006/06/extra-extra-read-all-about-it-nearly.html

गलती करना मानवीय है और कोई भी यह साबित नहीं कर सकता है कि एक कार्यक्रम सही है, इसलिए इस कठिन व्यवसाय में स्वयं की सहायता करने के लिए डिबगर / स्वचालित परीक्षण जैसे उपकरणों का उपयोग क्यों न करें?

यदि कोड पर्याप्त छोटा है, तो सरल परीक्षण करेंगे। इसके अलावा, अगर यह छोटा है और आप बग की प्रकृति जानते हैं, तो कोड पढ़ना पर्याप्त हो सकता है। हालाँकि, एक बार कोड आधार बड़ा होने पर, इसमें कई भाषाएं एक साथ मिलाई जाती हैं, साथ ही 3 स्तरीय, तो आपके पास कई स्तरों पर अच्छा परीक्षण कवरेज होना चाहिए और साथ ही बहुत अच्छा डिबगर - अन्यथा आप बहुत समय बर्बाद कर रहे होंगे।

तो, मुझे कब डिबगर की आवश्यकता नहीं है?

मैं सबसे चतुर कोडर नहीं हूं, न ही सबसे अनुभवी हूं, लेकिन फिर भी, कभी-कभी मुझे डिबगर का उपयोग करने की आवश्यकता नहीं है। तभी:

  • कोड मेरा है या अच्छी तरह से लिखा है
  • यह एक पठनीय भाषा में लिखा गया है
  • समग्र परियोजना छोटी है।

मैं कब डिबगर पर बहुत भरोसा करता हूं?

  • संक्षिप्त उत्तर: अक्सर
  • जब कोई एप्लिकेशन क्रैश होता है। विशेष रूप से जब यह तैनात किया जाता है। उस कंप्यूटर पर VS2010 स्थापित होने से "अज्ञात त्रुटि" और के बीच अंतर हो सकता है FileNotFoundException
  • जब एक 3 पार्टी पुस्तकालय दुर्घटना या दुर्व्यवहार करता है।
  • जब कोड खराब लिखा जाता है। विशेष रूप से अगर पिछले 10 वर्षों में 10 अलग-अलग लोगों द्वारा एक ही फाइल को छुआ गया था, जिनमें से 7 अब कंपनी के पास नहीं हैं।
  • जब परियोजना बड़ी है
  • जब कोड बल्कि अखंड है।
  • जब कई स्तरों (GUI, SQL, BL) शामिल होते हैं।

ध्यान दें कि "डीबगर" एक से अधिक टूल को संदर्भित कर सकता है। मैं विज़ुअल स्टूडियो डीबगर, SQL डीबगर (ज्यादातर संग्रहीत प्रॉक्स के लिए) और SQL प्रोफाइलर का उपयोग करता हूं (यह पता लगाने के लिए कि एसपी कहा जा रहा है)। क्या मुझे इस कैलिबर के उपकरण की आवश्यकता होगी जो मैं एक त्वरित sysadmin-ish पायथन स्क्रिप्ट लिख रहा था? नहीं, अगर मैंने अपना छोटा GUI- आधारित टूल बनाया है? निर्भर करता है। अगर यह .Net WinForms है - शायद नहीं। अगर यह WPF है - हाँ।

वैसे भी "वास्तविक" प्रोग्रामर को क्या परिभाषित करता है? एक जो जल्दी है? जानकार? एल्गोरिदम में अच्छा है? अच्छा प्रलेखन लिखता है? बस जब इस नए शीर्षक में एक स्नातक होता है? जादुई रेखा कब पार करती है?

मैं कहूंगा कि एक प्रोग्रामर जिसने अपने 100 साल के मौजूदा वर्षों के प्रयास में अपने हाथों को गंदा नहीं किया है, उसे जटिलता और खुद की सीमाओं (साथ ही साथ कोड की गुणवत्ता के साथ निराश) होने का मौका नहीं मिला है।

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

...

अब, सिद्धांत रूप में मैं कोड बेस को इतने लंबे समय तक पढ़ सकता था, कि मुझे बस मिल जाएगा। हालांकि, हैंड्स-ऑन दृष्टिकोण सबसे अच्छा काम करता है, साथ ही मैं अक्सर उस बेवकूफ कोड को फिर से लिखना चाहता हूं जिसे मैं देख रहा हूं। दुर्भाग्य से मुझे कोड आधार को साफ करने में 10 + साल लगेंगे जो मैं अंदर हूं। इसलिए डिबगर का उपयोग करना एक स्पष्ट पहला कदम है। केवल जब मुझे पता चलता है कि कोड की 5 मिलियन पंक्तियों में से कौन सी क्रिया कर रहा है, तो क्या मैं यह जानने के लिए कि कक्षा क्या कर रही है, यह जानने के लिए फ़ाइल को ऊपर और नीचे स्कैन करेगी।


+1, उत्कृष्ट उत्तर, मैं विशेष रूप से "जब कई स्तरों में शामिल हैं" पहलू से सहमत हूं, तो यह है कि शायद ही कभी "कोड पढ़ें और त्रुटि" अधिवक्ताओं द्वारा उल्लिखित है।
कार्सन 63000

खुशी है कि आप पूरी बात पढ़ सकते हैं।
जॉब

महान जवाब के लिए और "वास्तविक प्रोग्रामर" की परिभाषा की जांच के लिए +1। इस वाक्यांश के उपयोग ने ओपी को धूर्त, दिलचस्प और संभावित रूप से भड़काऊ बना दिया (क्योंकि निहितार्थ या सहजता के कारण)।
स्मंदोली

1
"कोई भी यह साबित नहीं कर सकता है कि एक कार्यक्रम सही है" यह सच नहीं है।
GManNickG

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

17

"मुझे डिबगर्स पसंद नहीं है। कभी नहीं, शायद कभी नहीं होगा।" - लिनुस टोरवाल्ड्स

दूसरी ओर, उसके पास स्टैक ओवरफ्लो खाता नहीं है, इसलिए मुझे यकीन नहीं है कि आप उसकी राय में रुचि रखते हैं :)


3
हम में से कई लिनुस टॉर्वाल्ड नहीं हैं, हम में से बाकी मनुष्यों के लिए हमें डिबगर की आवश्यकता है।
नोडी द नोड गाइ

7
कर्नेल डीबगर्स के लिए अच्छी तरह से झुकाव नहीं करते हैं।

7
हाँ, कर्नेल प्रोग्रामिंग यूज़र्सस्पेस प्रोग्रामिंग की तुलना में एक अलग क्षेत्र है। मैं आमतौर पर उपयोगकर्ताओं के लिए लाइनस की राय से सहमत नहीं हूं, लेकिन कर्नेलस्पेस के साथ काम करते समय वे निश्चित रूप से सम्मानजनक हैं।
वैकल्पिक

16
"मुझे डिबगर्स पसंद नहीं है" का मतलब यह नहीं है "मैं डीबगर्स का उपयोग नहीं करता हूं।" लिनस ने वास्तव में कहा था "मुझे डिबगर्स पसंद नहीं है। कभी नहीं, शायद कभी नहीं होगा। मैं हर समय जीडीबी का उपयोग करता हूं, लेकिन मैं इसे डिबगर के रूप में नहीं, बल्कि स्टेरॉयड पर एक डिस्सेम्बलर के रूप में उपयोग कर सकता हूं जिसे आप प्रोग्राम कर सकते हैं।" (मुझे पता है कि कुछ लोग इसका मतलब निकालने की कोशिश करेंगे कि लिनुस एक डिबगर का उपयोग नहीं करता है, लेकिन यह सटीक नहीं है।)
क्रिस्टोफर जॉनसन 24:11

6
ऐसा लगता है कि लिनुस टोरवाल्ड्स और मैं कभी किसी बात पर सहमत नहीं हैं।
ब्लूराजा - डैनी पफ्लुगुएफ्ट

11

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

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

संपादित करें:

मुझे अपनी प्रोग्रामिंग यात्रा में डिबगर का उपयोग न करने का सौभाग्य / दुर्भाग्य था। इस प्रकार अतीत में मुझे बिना डिबगर के डिबग करने के लिए मजबूर किया गया था। हालांकि डिबगर का उपयोग करना सीखने के बाद -> मैं बग ढूंढने में 100 गुना अधिक उत्पादक बन गया हूं ।


+1 के लिए "जब आपके कोड का मानसिक मॉडल आपके कोड द्वारा दिए गए आउटपुट में फिट नहीं होता है"
उपयोगकर्ता

8

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

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

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


1
आप हार्डवेयर-आधारित डिबगर बोर्डों की जांच करना चाहते हैं
स्टीवन ए लोवे

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

मैं ठीक इसके विपरीत हूं। मैं एम्बेडेड सिस्टम पर बहुत बार डिबगर का उपयोग करता हूं। मैं इसके बारे में सहमत हूं कि यह समय को परेशान करेगा, हालांकि। लूप में डिबगर डालने से होने वाले परिवर्तनों को फ़िल्टर करने और / या कम करने के लिए उचित मात्रा में प्रयास होते हैं।
कार्ल बेज़ेलफेल्ट

7

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

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

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


4
खैर, यह वही है जो मैं जांच करने की कोशिश कर रहा हूं - मैं एक बहुत ही अनुभवी प्रोग्रामर हूं और मैं कभी भी इसका उपयोग नहीं करता हूं।

5
@ स्नेह, शायद आपको कोई आवश्यकता नहीं है। निश्चिंत रहें, वह समय आएगा जहां डिबगर किसी मुद्दे की तह तक जाने का सबसे सरल तरीका होगा, चाहे आप वास्तव में एक का उपयोग कर रहे हों या नहीं ...
hvgotcodes

मैं वह सामान पढ़ सकता हूं जो मैंने भी नहीं लिखा था। और अगर मैं नहीं कर सकता, तो यह खराब है क्योंकि यह खराब कोड है। अन्य मामलों में, मैं डिबगर का उपयोग करता हूं।
GolezTrol

यदि आप जिस भाषा का उपयोग करते हैं, वह अपवादों का समर्थन करती है, और यदि आप उनका उपयोग कर रहे हैं + तो एक लॉगिंग फ्रेमवर्क उचित रूप से (जैसे log4j या ऐसा कुछ) आप हमेशा अपनी त्रुटि की रेखा की ओर इशारा करते हुए स्टैक ट्रेस के साथ समाप्त करेंगे। उस समय का 99% यह एक शून्य सूचक अपवाद है जहां आपको इसकी उम्मीद नहीं थी। एक और डिबगर आपको क्या बताने जा रहा है? अब, जब मैं सी में प्रोग्रामिंग कर रहा था, तो ऐसी चीजें थीं जो आप बस डिबगर के बिना नहीं पा सकते थे (जैसे स्टैक करप्शन)। लेकिन उन प्रकार की चीजें अब उच्च स्तरीय भाषाओं में नहीं होती हैं।
केविन

1
@kevin, ठीक है, मुझे लगता है कि उन दो के बीच समस्याओं का एक वर्ग है जहां डिबगर किसी मुद्दे की तह तक पहुंचने का सबसे स्वाभाविक तरीका है। हो सकता है कि मैं एक गतिशील भाषा ढांचे में किसी वस्तु पर लगाए गए गतिशील गुणों को देखना चाहता हूं जैसे कि अनाज। हो सकता है कि मैं बिल्कुल वही देखना चाहता हूं जहां मुझे लगता है कि कुछ अशक्त नहीं है, अशक्त है (एनपीई आपको बताता है कि अपवाद कहां है, न कि क्यों बात अशक्त है)। शायद मैं अपने डिबगर को अपवाद पर रोकना चाहता हूं ताकि मैं देख सकूं कि कोड के संयोजन ने एक अपवाद का कारण क्या है, न कि यह केवल स्टैकट्रेस में हुआ।
hvgotcodes

4

मैं नहीं करता हूं, और मैं 10 वर्षों से प्रोग्रामिंग कर रहा हूं। जब मैं c / c ++ में प्रोग्राम करता था, तो मैं करता था। अब मैं जावा में कार्यक्रम करता हूं। सच्चाई यह है कि यदि आप सही तरीके से लॉगिंग कर रहे हैं, तो आप स्टैक ट्रेस के साथ समाप्त हो जाएंगे जो कि अधिकांश कुशल डेवलपर्स के लिए पर्याप्त है। इसके अलावा अगर आप (अच्छा) यूनिट टेस्ट और फंक्शनल टेस्ट लिख रहे हैं, जो बग की एक पूरी कक्षा को खत्म कर देता है।


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

1
स्टैकट्रैक्स डेटा नहीं दिखाते हैं - आपको स्वयं उस जानकारी को जोड़ना होगा - लेकिन फिर वे शुद्ध सोने हैं।

1
@ Thorbjørn: वे डेटा दिखा सकते हैं, वास्तव में: उदाहरण के लिए, पायथन का साइबॉब मॉड्यूल देखें । (नाम में CGI ज्यादातर शाब्दिक है, मॉड्यूल का मूल उद्देश्य एक CGI दुर्घटनाग्रस्त होने पर प्रयोग करने योग्य स्टैक के निशान पेश करता है।) बेशक, इसके साथ, आपको कभी-कभी इतना अधिक डेटा मिलता है कि स्टैक पर नेविगेट करना मुश्किल हो जाता है। ब्याज की सीमा। मैं cgitb.enable(format='text')वैसे भी प्यार करता हूँ ।
सैमबी

मैं वास्तव में डिबगर्स का उपयोग नहीं करता हूं और मैं 7 ++ पर सी ++ ..
निक्को

@SBB केविन ने जावा के बारे में बात की, जो कि नहीं कर सकता

3

शायद ही कभी।

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

मैं केवल डिबगर का उपयोग करने की प्रवृत्ति रखता हूं जब ive को ASP.NET फ्रेमवर्क की तरह अप्रतिष्ठित कोड से अप्रत्याशित व्यवहार मिला।


3
इस धागे में कुछ असली हेट नॉब्स ...

2
वोट डाउन करने का कोई कारण नहीं - वह सही है।
वाड्सवर्ल्ड

11
-1 क्योंकि यह दावा यह कह रहा है कि वेगास में पैसा कमाने का तरीका सिर्फ हर हाथ जीतना है। यह स्थिति की वास्तविकता को प्रतिबिंबित नहीं करता है, और दावा है कि सभी कोड सरल होंगे केवल छोटी पृथक समस्याओं में मौजूद हैं। साथ ही, "इसे चलाएं, इसे ठीक करें" दावा पूरी तरह से अनदेखा करता है कि आप इसे ठीक करने के बारे में कैसे जाते हैं। मैं इसे स्लाइड करने जा रहा था, लेकिन फिर जोर देकर कहा कि असहमत होने वाले सभी लोग इसे नीचा दिखाने के लायक हैं।
whatsisname

2
-1: "आपके तरीके छोटे / सरल होने चाहिए, जो आपके दिमाग द्वारा संकलित और चलाए जाएं" वास्तविकता से अलग है। यह एक फंक्शन की तरह है जो 20 लाइनों से अधिक लंबा है। बकवास।
जॉन डिबलिंग

3

स्मालटाक में, मैं लगभग पूरी तरह से डिबगर में विकसित होता हूं :

  1. एक परीक्षण लिखें जो मुझे पता है कि विफल हो जाएगा।
  2. परीक्षण चलाएं। जब यह विफल होता है, तो डिबगर पॉप अप हो जाता है।
  3. डिबगर में लिखें, टेस्ट पास करने के लिए आवश्यक कोड।
  4. निष्पादन फिर से शुरू करें।
  5. अगर मुझे हरी बत्ती मिलती है, तो एक नए असफल परीक्षण के साथ चरण 1 पर जाएं। अन्यथा, डिबगर में यह पता करें कि मैंने क्या गलत किया और इसे ठीक किया।

3

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

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


2

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

मुझे स्वीकार करना चाहिए कि मैं डिबगर्स का उपयोग कम और कम करता हूं। मैं डेल्फी में 10 वर्षों से विकसित कर रहा हूं। मैं पीएल / एसक्यूएल में संग्रहीत प्रक्रियाएं भी लिखता हूं। कुछ महीनों से, मैं एक PHP डेवलपर भी हूँ।

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

लेकिन जैसा कि आप कहते हैं, डीबगर का उपयोग करना एक अपवाद है। ज्यादातर समस्याओं को सिर्फ कोड को पढ़ने और आपके द्वारा की गई गलतियों (या किसी और) को ठीक करने से हल किया जाता है।

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


2

मैं कभी-कभी कोई डिबगर के साथ कोड करता हूं, लेकिन केवल जब बंदूक की नोक पर मजबूर किया जाता है, अर्थात। 8051 या Z80 पर विरासत एम्बेडेड बंदूक।

IMHO, आपको किसी भी जटिल काम पर डिबगर और लॉगिंग की आवश्यकता है। एक बार दूसरे का विकल्प नहीं है। एक लॉगिंग सिस्टम मदद नहीं कर सकता है यदि ऐप ड्राइवर में सामान करता है, उदाहरण के लिए, जहां कोड केवल एक चीज कर सकता है वह हार्डवेयर के साथ इंटरैक्ट करता है और एक सेमाफोर सेट करता है।

एक डिबगर एक सिस्टम त्रुटि के साथ मदद नहीं कर सकता है जहां ऐप आपके द्वारा लिखे गए तरीके के अनुसार ठीक काम कर रहे हैं, लेकिन सिस्टम अभी भी कुछ रुक-रुक कर कॉम्स प्रोटोकॉल त्रुटि के कारण काम नहीं करता है।

तो, मुझे बेवकूफ, चमकदार कीड़े और हार्डवेयर कॉकपअप को हटाने के लिए डिबगर की आवश्यकता है। मुझे आंतरायिक प्रणाली एकीकरण कीड़े को पकड़ने के लिए अच्छी लॉगिंग की आवश्यकता है।

मुझे दोनों मिलेंगे - मुझे मेरी मदद की ज़रूरत है!


2
z80 डिबगर्स के लिए काफी बड़ा है। CP / M के पास ZSID था।

1

मैं इन चरणों के विफल होने पर केवल डीबगर का उपयोग करता हूं:

  1. त्रुटि प्रतिलिपि प्रस्तुत करने योग्य हो जाओ। सोच। यह अक्सर वह सब होता है जिसकी आवश्यकता होती है।
  2. किसी भी स्टैक ट्रेस और लॉग की जाँच करें।
  3. आपत्तिजनक कोड के आसपास अधिक लॉगिंग जोड़ें।

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

इसलिए विवेकपूर्ण रूप से लॉगिंग स्टेटमेंट एक लंबा रास्ता तय करता है।


1

क्या यह बस इतना हो सकता है कि बहुत अनुभवी प्रोग्रामर बहुत पुराने प्रोग्रामर के समान हैं, और उन्होंने प्रोग्राम करना सीखा, और अपनी आदतों का गठन किया, जब डिबगर हमेशा उपलब्ध नहीं थे, और कभी-कभी बहुत अच्छे नहीं होते हैं?

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


0

यह व्यक्तिगत पसंद का सवाल है।

ईमानदारी से मुझे लगता है कि डिबगर्स कुछ स्थितियों में उपयोगी होते हैं, जहां यह जानने में बहुत मदद मिलती है कि आपके प्रोग्राम के निष्पादन के किसी भी चरण में आपके राम पर क्या हो रहा है।

डिबगर की प्राथमिक उपयोगिता एक कार्यक्रम को रोकने के लिए है बिना कार्यक्रम के खुद को रोकने के लिए डिज़ाइन किया गया है: यह सुविधा काफी महत्वपूर्ण है।

उन 2 विशेषताओं के अलावा, मुझे नहीं लगता कि एक डिबगर वास्तव में आवश्यक है; आपके द्वारा किए गए किसी भी जटिल कार्यक्रम में किसी प्रकार का "वर्बोज़" मोड होना चाहिए, यानी प्रिंटफ या एसटीडी :: कॉट के साथ जो कुछ भी हो रहा है, उसे बताना, और उसके लिए बहुत सारे अन्य पैरामीटर।

बस कल्पना कीजिए कि आप एक कार्यक्रम बनाते हैं, और उपयोगकर्ता को इसका उपयोग करने में समस्या होती है: कैसे पता करें कि क्या वह इसका उपयोग कर रहा है जिस तरह से इसका उपयोग करने के लिए डिज़ाइन किया गया था, या यदि वह जिस चीज़ के बारे में शिकायत कर रहा है वह बग हो सकता है?

डीबगर्स आपकी कार के लिए इलेक्ट्रिकल स्टीयरिंग की तरह हैं: यह एक के लिए अधिक आरामदायक है, लेकिन यह आपकी ड्राइव को बेहतर नहीं बनाएगा।

Progamming डिजाइन और तर्क के बारे में है, जिस तरह से उपकरण ट्रैकिंग सामान में आपकी सहायता कर सकते हैं वह आपको एक बेहतर प्रोग्रामर नहीं बनाता है।

प्लस डिबगर्स संकलित भाषाओं के लिए उपयोगी होते हैं, बहुत कम अंतरंग लोगों के लिए।


2
मुझे समझ में नहीं आ रहा है कि संकलित बनाम व्याख्या का इससे क्या लेना-देना है।
माइकल बूर

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