जवाबों:
कुछ भी मत मानो
यह अक्सर कहने के लिए आकर्षक है "ओह, मुझे पता है कि यह बिट कोड क्या कर रहा है, यह ठीक है"। ऐसा मत करो। हर धारणा का परीक्षण करें और हर चीज को ध्यान से देखें।
वृद्धिशील परीक्षण ।
अपने कोड में पहले गहराई में जाएं और धीरे-धीरे ऊपर बढ़ते हुए छोटे मॉड्यूल से इसका परीक्षण करें। इस तरह, आप बहुत अधिक तनाव में नहीं हैं कि यह पता लगाने की कोशिश करें कि समस्या वास्तव में कहां हो सकती है।
इसका मतलब यह भी है कि यह एक बार में कम कोड को प्रभावित करता है क्योंकि आप कई बार बढ़ रहे हैं। कभी-कभी मेरे पास ऐसे मुद्दे हैं जहां मैंने कुछ तय किया है और इससे बहुत सारे सामान टूटने लगे हैं। मैं इसके लिए अपने बॉस को श्रेय देता हूं क्योंकि जब उन्होंने मुझे गड़बड़ किया तो उन्होंने मुझे यह सिखाया।
फूट डालो और जीतो एक अच्छा दृष्टिकोण है। कुछ दृश्यमान इनपुट (उपयोगकर्ता इनपुट / नेटवर्क ईवेंट ...) और आउटपुट (लॉग, उपयोगकर्ता को आउटपुट, आउटबाउंड नेटवर्क संदेश ...) की पहचान करने का प्रयास करें, जिसके बीच समस्या मौजूद है। उन दोनों के बीच बड़े आकार के चक्रों या महत्वपूर्ण बिंदुओं पर प्रिंट डालने की कोशिश करें और जहां कोड में बग है, उसे संकीर्ण करने का प्रयास करें।
संस्करण नियंत्रित कोड पर प्रतिगमन के मामले में विभाजित और जीतना भी बहुत अच्छा काम कर सकता है। दो बिल्ड खोजें - एक जहां यह उम्मीद के मुताबिक काम करता है, अन्य प्रतिगमन के साथ। संभावित संदिग्धों के रूप में चेकइन के एक गुच्छा के साथ छोड़ दिए जाने तक अंतराल को कम करें।
बाइनरी बग चॉप के बजाय, फॉर्म में परीक्षण लिखें
यह सत्यापित करने के लिए कि आप वास्तव में ऐप के कामकाज के बारे में क्या जानते हैं बनाम क्या आप सच मानते हैं।
अधिकांश IDE तरीकों को निकालने और xUnit परीक्षण स्टब्स को उत्पन्न करना आसान बनाते हैं। उस का उपयोग करें।
क्यों नहीं छिड़कते डेब्यू? क्योंकि आपके द्वारा किए जाने के बाद, आपको संभवतः उस कार्य को पूर्ववत करना होगा और उन डिबग की उचित मात्रा को हटाना होगा। जब आप परीक्षण लिखते हैं, तो आपका डिबगिंग भविष्य के कीड़े की रोकथाम और पता लगाने में सहायता करेगा।
जैसा कि दूसरों ने कहा है - कुछ भी मत मानो। यह विशेष रूप से सच है अगर इसका कोड आपने लिखा है। दूसरों के कोड को डीबग करते समय आप धीमा होने की अधिक संभावना रखते हैं क्योंकि कोड आपके लिए नया है या आप कोडर पर भरोसा नहीं करते हैं। अपने स्वयं के कोड को डीबग करते समय यह मान लेना बहुत आसान है कि आपने इसे सही तरीके से लिखा है, धीमा करें!
डिबगिंग की वास्तविक प्रक्रिया के लिए:
इकाई परीक्षणों को जोड़ना और पहले अधिक डिबगर का उपयोग करके अधिक कुशल लॉगिंग करना। आपको भविष्य में बग को शुरू नहीं करने में मदद करने के लिए इकाई परीक्षण होने का अतिरिक्त लाभ भी मिलता है और लॉगिंग भविष्य में सत्रों को डीबग करने में मदद करेगा।
कोड के एक छोटे से टुकड़े पर कदम रखने से पहले, देखें कि क्या आप सटीक रूप से परिणाम निर्धारित कर सकते हैं। यह कुछ भी नहीं मानने के चेहरे पर उड़ान भरने की प्रवृत्ति है (जो मैंने बीटीडब्ल्यू को वोट दिया) लेकिन जैसा कि आप अनुभव प्राप्त करते हैं, यह संकीर्ण रूप से देखने में मदद कर सकता है।
यह तुच्छ लग सकता है, लेकिन अपने डिबगर की बारीकियों को जानें और हॉट-कीज़ सीखें। कभी-कभी डिबगर्स इतना धीमा हो सकता है कि आपके कदम के माध्यम से आपका मन आश्चर्यचकित हो जाए। यदि आप मशीन के साथ रख सकते हैं और आसपास मूस नहीं कर रहे हैं, तो यह मदद कर सकता है।
यदि आप डिबगिंग करते समय कोड को संशोधित कर सकते हैं:
पसंद:
bool isLessThan5 = a < 5;
bool isGreaterThan10 = a > 10;
if ( isLessThan5 || isGreaterThan10 )
{
// more code here
}
के बजाय:
if ( a < 5 || a > 10 )
{
// more code here
}
जिन मामलों के लिए आप सब कुछ डिबग नहीं कर सकते हैं, जो भी कारण हो, सह-कार्यकर्ता के साथ "रबर-डक" सीखें। कभी-कभी समझाने की क्रिया प्रकाश डालती है। (ठीक है, शायद यह प्रश्न विषय में बिल्कुल नहीं है, लेकिन मुझे लगता है कि यह वारंट उल्लेख के काफी करीब है)
पिछले 22 वर्षों के अधिकांश खर्चों पर आधारित दो बातें, जो अन्य लोगों द्वारा लिखे गए कोड को बनाए रखती हैं।
आप जिस प्रकार के कीड़े लिखते हैं, उसे समझें।
उदाहरण के लिए, मैं एक बहुत ही जटिल कोडर हूं, इसलिए एक बार जब मेरा कोड संकलित हो जाता है, तो यह आमतौर पर तुच्छ बग से मुक्त होता है। इसलिए मेरे कीड़े थ्रेड डेडलॉक जैसी अजीब जटिल चीजें हैं। दूसरी तरफ, मेरा एक दोस्त है जो ज्यादातर तुच्छ कीड़े लिखता है - छोरों के लिए सी ++ के अंत में अर्धविराम, इसलिए अगली पंक्ति केवल एक बार निष्पादित होती है, उस तरह की चीज।
यह मत समझो कि अन्य लोग उसी प्रकार के कीड़े लिखते हैं जो आप करते हैं।
मैं नहीं जानता कि कितनी बार मैंने बड़ी डिबगिंग बंदूकों को बाहर निकालने में समय बर्बाद किया है, यह मानते हुए कि एक बग वास्तव में सूक्ष्म अजीब तरह का था, केवल मेरे दोस्त को मेरे कंधे पर देखने और जाने के लिए, "क्या आपने देखा कि अतिरिक्त अर्धविराम? " वर्षों के बाद, मैं पहली बार अन्य लोगों के कोड को देखते हुए तुच्छ, कम लटकने वाले फल के लिए जाता हूं।
अपने औजारों को जानें। उदाहरण के लिए, Visual Studio के डीबगर में TracePoints नामक एक भयानक विशेषता होती है, जो ब्रेकप्वाइंट की तरह होती है, लेकिन आपके कोड को रोकने के बजाय डीबग आउटपुट में ट्रेस स्टेटमेंट सम्मिलित करता है।
पुस्तकों को पढ़ना या अपने डिबगर का उपयोग करने के बारे में एक कक्षा लेना अत्यधिक अनुशंसित है। मैंने कुछ कक्षाओं को लिया और जॉन रॉबिंस की कुछ पुस्तकों को पढ़ा, जिन्होंने डिबगर के रूप में मेरी प्रभावशीलता में बड़ा बदलाव किया।
स्वचालित इकाई परीक्षण और अन्य प्रकार के एकीकरण और कार्यात्मक परीक्षण लिखें।
आपके पास जितने अधिक स्वचालित परीक्षण होंगे, उतना ही कम समय आपको डिबगर में बिताना होगा।
इसके अलावा, अच्छा डिजाइन - ठोस सिद्धांत। यदि आप छोटी, केंद्रित कक्षाएं और वंशानुक्रम पर रचना का पक्ष ले रहे हैं, दोहराव को समाप्त कर रहे हैं, आदि, तो आपका कोड हमेशा डिबग करना आसान होगा।
मुझे लगता है कि अच्छी तरह से डिज़ाइन किया गया कोड उन कोडों का एक अलग सेट तैयार करता है जो कोड अच्छी तरह से डिज़ाइन नहीं किए गए हैं। आम तौर पर बोलना, अच्छी तरह से डिज़ाइन किया गया कोड ऐसे कीड़े पैदा करता है जो खोजने, पुन: पेश करने और ठीक करने में आसान होते हैं।
अपवाद (और वहाँ हमेशा एक है) कोड multithreading है :-)
यदि आपने इसे एक छोटे से क्षेत्र में सीमित कर दिया है, लेकिन फिर भी त्रुटि नहीं हो सकती है, तो अपने प्रतिद्वंद्वी के 'कोड देखें + असेंबली' विकल्प का प्रयास करें। यह कहने के लिए पर्याप्त ASM जानने के लिए "यहां एक शाखा होनी चाहिए" या "यह केवल कम शब्द की नकल क्यों है?" अक्सर कोडिंग त्रुटि को इंगित करेगा।
बहुत मूल्यवान पुस्तक देखें क्यों कार्यक्रम विफल: एंड्रियास ज़ेलर द्वारा व्यवस्थित डिबगिंग के लिए एक गाइड । यह आपको कई तकनीकों, सिद्धांतों और उपकरणों से परिचित कराएगा, जिनमें से कुछ शोध के अत्याधुनिक हैं।
पुस्तक के लिए स्लाइड ऑनलाइन उपलब्ध हैं, लेकिन मुझे लगता है कि पुस्तक स्वयं पढ़ना आसान है।
पुस्तक आपको आरंभ करने में मदद करेगी और आपको डिबगिंग के बारे में अधिक वैज्ञानिक रूप से सोचने में मदद करेगी, लेकिन यह अभ्यास का कोई विकल्प नहीं है। आपके प्रदर्शन में परिमाण में सुधार के क्रम को देखने से पहले आपको 10 वर्षों के लिए लेखन और डिबगिंग की आवश्यकता हो सकती है। मुझे अब भी याद है कि सीनियर डेवलपर्स को देखकर रवि पर मेरा जबड़ा गिर गया था, जो 30 साल से यूनिक्स के लिए प्रोग्रामिंग कर रहे थे, मिनटों में अस्पष्ट मल्टीथ्रेडिंग या समानांतर बग ढूंढते हैं। अनुभव मायने रखता है!