जब आप बग को ठीक करने के लिए सभी रास्ते समाप्त कर चुके हों तो क्या करें


13

मैं एक जूनियर प्रोग्रामर (अब तक के 4 महीने के करियर का अनुभव) हूं, एक क्रॉस प्लेटफॉर्म मोबाइल एप्लिकेशन (1 व्यक्ति टीम - तो बस अपने आप) पर काम कर रहा हूं।

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

क्या आपके पास कुछ व्यापक तकनीकों के जूनियर प्रोग्रामर के लिए कोई सलाह है (एक रन के लिए जाएं, मेरे सभी कोड को कागज पर प्रिंट करें और एक पेन के साथ इसके माध्यम से जाएं, आदि) मैं इस बग के साथ मेरी सहायता कर सकता हूं?

मेरी बग के लिए थोड़ा और संदर्भ देने के लिए; इसमें क्रॉस प्लेटफ़ॉर्म API मोसिंक शामिल है, जब मैं क्रियाओं का एक विशिष्ट अनुक्रम करता हूं, तो वर्तमान स्क्रीन redraw नहीं है (और ऐसा प्रतीत होता है) कि पहले प्रदर्शित स्क्रीन अभी भी पॉइंटर / कुंजी प्रेस ईवेंट प्राप्त कर रही है और वर्तमान स्क्रीन नहीं।

विशिष्ट अनुक्रम:
- मेनू स्क्रीन प्रदर्शित - क्लिक करें "दिखाएँ प्रचलित आदेश बटन"
- पिछला आदेश स्क्रीन प्रदर्शित - "लोड फ़ाइल" पर क्लिक करें फिर मेनू बटन पर क्लिक करें और वितरण स्क्रीन खोलें
- वितरण स्क्रीन प्रदर्शित - क्लिक मेनू बटन और खुले खरीद स्क्रीन
- खरीद स्क्रीन प्रदर्शित - यहां त्रुटि, इस स्क्रीन पर इनपुट प्रदर्शित नहीं है / इस पर प्रतिक्रिया नहीं दी गई है, सूची दृश्य स्क्रॉल न करें, बटन क्लिक पर प्रतिक्रिया नहीं करते हैं, सूची दृश्य कोशिकाएं क्लिकों पर प्रतिक्रिया नहीं करती हैं


मैं बोर्ड पर सलाह लूंगा, बग हर बार समान चरणों का पालन करते हुए 100% प्रजनन योग्य है, हालांकि यह अभी भी पता लगाना बहुत मुश्किल है कि सूचक घटनाओं को कैसे प्रसारित किया जा रहा है और किस स्क्रीन के कारण वास्तव में एपीआई आईआईटी का एक हिस्सा है। पहुंच (या पता नहीं कैसे)।

इसके अलावा, मुझे एक अलग जोड़ी की आंखें पसंद होंगी, जो मेरे काम पर जाएंगी और बग को इंगित करेंगी, लेकिन जैसा कि मैंने कहा कि मैं 1 की टीम हूं, मेरा बॉस मुझे निर्देश देता है, वह कंपनी का मालिक है और एक ऐप के लिए विचार रखता है, लेकिन करता है पता नहीं सी ++ या किसी भी हाल की भाषाएं (कोबाल? मुझे लगता है कि सभी है)। कंपनी के बौद्धिक कोड / संपत्ति को भंग करने / दिखाने के बिना आँखों की दूसरी जोड़ी कैसे प्राप्त करें, इस बारे में कोई सलाह?

... और इस भुगतान वाली इंटर्नशिप को छोड़ना कोई विकल्प नहीं है, अनुबंध कहता है कि अगर मैं 12 महीने के अनुबंध के 6 महीने से पहले छोड़ता हूं तो शायद मैं अपने वार्षिक वेतन का 30% भुगतान करने के लिए उत्तरदायी हूं


6
क्या यह 100% प्रजनन योग्य है?

5
सरल उत्तर में आपके सहकर्मी शामिल होते हैं । एक टीम के रूप में आप इसे क्षणों में हल करेंगे।
फेटी

2
@ जो - हमेशा नहीं। उदाहरण के लिए, कई जटिल अंतःक्रियात्मक उप-प्रणालियों के सामूहिक व्यवहार में बग, जहां अलग-अलग उप-प्रणालियों को उनकी भूमिकाओं के सूक्ष्म रूप से असंगत विचारों के साथ बनाया गया था, जिसके परिणामस्वरूप विशिष्टताओं में गैर-स्पष्ट अस्पष्टताएं होती हैं - आमतौर पर बहुत कम लोगों को एकाधिक उप-प्रणालियों और उनके इंटरैक्शन का विस्तृत ज्ञान होता है इन समस्याओं का निदान करने में सक्षम होने के लिए। कभी-कभी आपको बात करने वाली सभी टीमों को प्राप्त करने की आवश्यकता होती है , और जब दो लोग एक-दूसरे को फोन करना शुरू करते हैं, तो एक मौका होता है कि वे असंगत मान्यताओं से संबंधित कुछ पर चर्चा कर रहे हैं।
स्टीव

मैंने आपके खातों को मर्ज कर दिया है। आप साइन इन करने के लिए अपने याहू ओपन का उपयोग कर सकते हैं। मैं आपके प्रश्न को एक उत्तर के रूप में पोस्ट की गई जानकारी को शामिल करने के लिए संपादित कर रहा हूं।
एडम लेअर

btw। नीचे दिए गए मेरे उत्तर के अलावा, मैंने विकिपीडिया पर पढ़ा कि मॉस्किन अब नहीं है?
ब्रैड थॉमस

जवाबों:


19

यदि आप 100% समय के मुद्दे को पुन: उत्पन्न कर सकते हैं, तो अंतिम चरण (जितनी जल्दी हो सके) पर एक ब्रेक प्वाइंट सेट करें। यदि आप पूरे कॉल स्टैक से चलते हैं, तो मुझे पूरा यकीन है कि आप कुछ अप्रत्याशित मूल्यों के लिए कहीं आने वाले हैं, या कुछ ऐसा है जिसे कॉल किया जाना चाहिए, लेकिन नहीं।

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

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


4
और अगर किसी भी कारण से आप डिबगर का उपयोग नहीं कर सकते हैं तो कोड के बिट के आसपास कुछ ट्रेसिंग जानकारी डालें जो आपको लगता है कि विफल हो रही है जो आपके फ़ंक्शन कॉल को एक पाठ फ़ाइल में लॉग करता है।

3
"दूर चलें" के लिए +1। यह पता करने के लिए बहुत अनुभव होता है कि दूर चलना संभवतः समस्या को दूर करने की तुलना में अधिक उत्पादक होगा। आपकी स्थिति उस विशिष्ट अनुभव को इकट्ठा करने के लिए एक अच्छी जगह की तरह लगती है।
माइक शेरिल 'कैट रिकॉल'

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

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

10

डिबगिंग को अलग करने और समझने के बारे में है कि वास्तव में समस्या क्या है (फिक्स लगाने की तुलना में)

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

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


5

ये केवल कुछ चीजें हैं जो मैंने अतीत में की हैं, जाहिर है कि वे हर स्थिति में काम नहीं करेंगे:

  1. एहसास है कि यह सिर्फ कोड है, और कहीं न कहीं एक बग (यह सिर्फ काला जादू नहीं है) जिसे आप ठीक कर सकते हैं
  2. एक ब्रेक ले लो।
  3. कोड के माध्यम से बहुत धीरे-धीरे कदम बढ़ाएं, प्रत्येक चरण का विश्लेषण करें और सुनिश्चित करें कि आप इसे समझ रहे हैं और यह क्या कर रहा है, किसी चीज पर चमक नहीं।
  4. समस्या को देखने के लिए आंखों की दूसरी जोड़ी लें।
  5. सो जाओ और कल तक इसके बारे में भूल जाओ (अपना सिर साफ करो), एक नए दृष्टिकोण के साथ आओ)।
  6. अपने कोड का प्रिंट आउट लें, और प्रत्येक लाइन का विश्लेषण करें, मार्जिन में नोट करें, हर लाइन के हर निहितार्थ को समझें
  7. यदि यह एक महत्वपूर्ण बग नहीं है, लेकिन ऐसी त्रुटियां पैदा कर रहा है, जिसके बारे में उपयोगकर्ता को जानने की आवश्यकता नहीं है, तो मेरे पास (शर्म की बात है, लेकिन ईमानदारी से) बग को फंसा दिया, और इसे निगल लिया ! यदि यह खतरनाक नहीं है, और आप इसका कारण नहीं खोज सकते हैं, तो कभी-कभी आप इसके लिए फंस जाते हैं और उपयोगकर्ता को कुछ भी नहीं होने देते हैं। यह ग्राहक के लिए ROI के बारे में है, और कभी-कभी इसके लायक नहीं है।
  8. बग को मौखिक रूप से बताएं कि आप इसे शिकार करने और इसे मारने के लिए जा रहे हैं। कभी-कभी भाग जाएगा। :-)

यह काला जादू नहीं है!
गाय सिरटन

सभी जटिल निर्भरताओं के साथ आज हम अपने कोड में लेते हैं, यह काला जादू है। लेकिन आप इसे अच्छे से देख सकते हैं :)
सुबु शंकर सुब्रमण्यन

3

कीड़े को हल करते समय मेरे पास आमतौर पर यह दृष्टिकोण होता है।

  1. बग को पुन: उत्पन्न करने के लिए एक अच्छा कदम बनाएं
  2. स्टेप बाई स्टेप सरल करें
  3. कोड में बग कहां होता है? जैसे क्या कार्य शामिल है?
  4. बग होने पर कॉलचैन क्या कोड चुनता है।
  5. स्थान पर ध्यान दें, यह कब ठीक है, कब नहीं। तब तक इसे दोहराएं जब तक कि आपको ठीक वही स्थान नहीं मिला जहां त्रुटि हुई।
  6. ऐसा क्यों होता है?

इस बिंदु पर यह आमतौर पर स्पष्ट है कि क्या हुआ है क्योंकि मैंने समस्या पर ध्यान केंद्रित करने की प्रक्रिया में बहुत कुछ सीखा है, इसलिए मुझे पता है कि मुझे क्या करना है। या मेरे पास एक बहुत ही केंद्रित प्रश्न है जो मैं एक मंच में पूछ सकता हूं।

फिर मैं समस्या को ठीक करने की कोशिश करता हूं, और बग को ठीक करने के लिए चरण एक में आपके द्वारा बनाए गए चरण का उपयोग करें।


3

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

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


मैं सहमत हूं, कि अक्सर मेरे लिए काम किया है।
माइक डनलवे

1

जैसा कि दूसरों ने कहा 1) मज़बूती से इसे पुन: पेश करने में सक्षम हो, और 2) एक डिबगर में उस बिंदु तक आगे कदम रखें जहां यह होता है।

अगर मैं ऐसा नहीं कर सकता, तो किसी भी कारण से, मेरे पास दो अन्य विधियां हैं जिनके लिए दोनों को कोड के एक अलग संस्करण की आवश्यकता होती है जो बग प्रदर्शित नहीं करता है।

  1. डिबगर के तहत कोड के दोनों संस्करणों को साइड-बाय-साइड चलाएं। जब तक बुरा एक अच्छा से अलग कुछ नहीं करता है तब तक उनके साथ कदम रखें।

  2. वैकल्पिक कोड के अच्छे और बुरे संस्करणों को चलाना। एक है diff या संस्करणों के बीच मतभेद के कुछ अन्य सूची। फिर वृद्धिशील रूप से किसी भी संस्करण का कोड बदलकर इसे और अधिक बारीकी से मिलाने के लिए। यदि बुरा अच्छा हो जाता है, या अच्छा बुरा हो जाता है, तो मैं परिवर्तन को वापस करता हूं और एक छोटा परिवर्तन करता हूं। इस तरह मैं बग पर घर आता हूं। मुझे लगता है कि यह "समस्या के दोनों तरफ हो रही है और केंद्र की ओर काम कर रहा है"। इस विधि में डीबगर की आवश्यकता नहीं है।

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


1

यदि आपको एक जूनियर प्रोग्रामर के रूप में हाथ पर काम करने के लिए सौंपा गया था, तो कम से कम एक व्यक्ति है जो मानता है कि आप इसे खुद से संभालने में सक्षम थे।

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

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

लेकिन, यदि आप अपना सिर साफ कर लेते हैं, तो सप्ताहांत के बाद वापस आ जाते हैं, आप बिना किसी की सहायता के इसे कुछ ही समय में हल करने में सक्षम हो सकते हैं। हस समय यह होता रहता है।


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

@mattnz सभी मेरा सुझाव है, मदद मांगने से पहले, अब तक किए गए प्रयासों का दस्तावेज़ीकरण करें, और, यह देखें कि सभी ज्ञात विकल्प समाप्त हो गए हैं। मुझे नहीं पता कि इसे क्या कहा जाए, लेकिन मैंने कभी भी ऐसा नहीं किया कि आप टीमवर्क का क्या जिक्र करते हैं।
vpit3833

मैं capable ... यह सब अपने आप से निपटने में सक्षम ’की ओर इशारा करना चाहता था, मेरे लिए निहित था कि आप अपने दम पर थे। मुझे यह जानकर खुशी हुई कि मैंने आपकी तुलना में इसे थोड़ा मजबूत बताया है।
मटनज

0

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

यदि आप इसे नहीं दोहरा सकते हैं, तो आपको एक समस्या है, आप कैसे पुष्टि करते हैं कि आपने इसे ठीक कर दिया है। डिबग कोड में डालें और वहां छोड़ दें। आखिरकार, अपने आप से पूछें, क्या "बंद: डीएनआर" एक वैध विकल्प है? (मैंने किया और पुनरावृत्ति नहीं कर सका)। व्यापार में, अंततः यह एक लागत / लाभ निर्णय है।

यह मत समझो कि आपके पुस्तकालय सही हैं, पुष्टि करें कि वे हैं।

एक ब्रेक लें, लागत के बारे में व्यावहारिक रहें बनाम ठीक करने की आवश्यकता है, और सबसे ऊपर, किसी और को आपके पास बैठने और मदद करने के लिए कहें।


0

यहाँ बहुत अच्छे जवाब। कुछ अन्य टिप्स:

यूआई शायद ही कभी अलगाव में रहते हैं। बग को पुन: उत्पन्न करने के लिए आवश्यक न्यूनतम सेट के साथ एक परीक्षण कार्यक्रम बनाएं। यदि यूआई अच्छी तरह से डिज़ाइन किया गया है, तो आपको उन यूआई घटकों को हटाने में सक्षम होना चाहिए जो विफल हो रहे हैं, और उन्हें एक परीक्षण कार्यक्रम में अलगाव में चलाते हैं। क्या आप अभी भी समस्या को पुन: उत्पन्न कर सकते हैं? यदि ऐसा है, तो समस्या आपके UI संरचना या ढांचे में होने की संभावना है। अपने UI संरचना की जाँच करें - विशेष रूप से अदृश्य तत्वों के लिए देखें। यह जानने की कोशिश करें कि जब आप उस सूची दृश्य पर क्लिक करते हैं तो क्या होता है और यह प्रतिक्रिया नहीं देता है - क्या घटना संचालकों को आमंत्रित किया जाता है? ध्यान रखें, यूआई फ्रेमवर्क में ही कीड़े मौजूद हो सकते हैं - उस निष्कर्ष पर न जाएं, लेकिन इसे स्पष्ट रूप से नियमबद्ध न करें। एक त्वरित परीक्षण मोसिंक के अपने संस्करण को अपग्रेड करना और जांचना है कि क्या लक्षण हैं।

असफल होना: आपके परीक्षण कार्यक्रम में क्या बचा है? जो कुछ भी रहता है उसके सभी घटकों को समझें, विशेष रूप से किसी भी चलने वाले धागे। बैकग्राउंड में कुछ डेटाबेस मेंटेनेंस कर रहा है? किसी तरह की एक फ़ाइल स्पूलर? NSA उपयोगकर्ता व्यवहार निगरानी कोड? क्या यूआई इनमें से कुछ घटकों (संभवतः पर्दे के पीछे) के साथ काम कर रहा है? UI किस पृष्ठभूमि पर कार्य करता है?

जब आप कोड पढ़ रहे हों - जिसे आपको काफी समय देना चाहिए, तो बग में कठिनाई को देखते हुए - कुछ बुरे अभ्यासों पर ध्यान दें जो आपके बग को अस्पष्ट कर सकते हैं। विशेष रूप से, क्या आप इसमें से कोई भी देखते हैं?

try {
    SaveTheWorld();
} catch (std::exception& ex) { /* oh it didn't work, let's just ignore it */ }

यह अविश्वसनीय रूप से खराब अभ्यास है और इस तरह, काफी सामान्य है (अरे देखो यह दुर्घटना नहीं हुई!)। सुनिश्चित करें कि आप ऐसा कोई भी कोड अपग्रेड कर रहे हैं जो कम से कम उसे लॉग इन करे - अधिमानतः गलत अपवाद हैंडलिंग को पूरी तरह से हटा दें। (अंगूठे का एक नियम यह है कि यदि आप नहीं जानते कि अपवाद क्या है, तो आप इसे संभालने के लिए तैयार नहीं हैं।) यदि यह सी-स्टाइल एपीआई के साथ बातचीत कर रहा है, तो गिराए गए त्रुटि-कोड रिटर्न मानों के लिए देखें, और सुनिश्चित करें कि आप जिस भी टूल के साथ बातचीत कर रहे हैं, उससे त्रुटि स्थिति की जानकारी की जाँच कर रहे हैं।

यह देखते हुए कि आपका परीक्षण कार्यक्रम अब कैसे ठीक से विफलताओं को संभाल रहा है, और आपने इस तरह से उत्पादित लॉग को पढ़ा है, लेकिन फिर भी बग को हाइलाइट नहीं किया गया है, इंटरफेस की जांच करें। क्या कोई नेटवर्क लेनदेन है जो कवर के तहत हो रहा है? यदि हां, तो इसे विंडसरक के साथ मारो। डेटाबेस लेनदेन? डेटाबेस सर्वर की स्थिति के बारे में कुछ क्वेरी लॉगिंग या जाँच करें। फाइलसिस्टम या नेटवर्क शेयर हिट हो रहे हैं? मध्यवर्ती फ़ाइलों की जाँच करें, या I / O का पता लगाने के लिए डीबगर का उपयोग करें। हार्डवेयर I / O? निगरानी और जांच। अनुभवजन्य हो। UI अच्छी तरह से आपके द्वारा अनुमानित नहीं किए गए कुछ पृष्ठभूमि ऑपरेशन पर लटका दिया जा सकता है।

अन्त में: घबराओ मत। शांत रहें, और जो आपने कोशिश की है उसका ट्रैक रखें। यदि आप अभी भी इसे नहीं पा सकते हैं, तो बारिश के दिन नीचे जाने के लिए इसे "ज्ञात मुद्दा" बनना होगा। आप उस निर्णय को सही ठहराने के लिए बहुत सारी सामग्री चाहते हैं, अगर उसे इस तरह से जाना है।


0

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

आपका पहला उद्देश्य यह समझना है कि आपके कोड में बग क्यों हो रहा है । शुरू में इसे ठीक करने की कोशिश मत करो। बस इसे समझने की कोशिश करो । यदि आप इसे समझे बिना इसे ठीक करने का प्रयास करते हैं तो आप इसके आस-पास हैकिंग करेंगे और संभवतः तकनीकी ऋण का परिचय देंगे , भले ही आप इसे हल कर लें।

एप्लिकेशन के व्यवहार के माध्यम से कदम, लाइन से लाइन। चर मान देखें। नियंत्रण का प्रवाह देखें। व्यवहार पहले कहां से विचलित होता है जो आपकी समझ आपको बताती है कि यह होना चाहिए? क्या आप समझते हैं कि ऑपरेटिंग सिस्टम आपके ऐप पर घटनाओं को कैसे भेजता है? यदि आप "ब्लैक बॉक्स" समस्या से बाधित हैं, तो क्या आपको संकलित पुस्तकालयों / चौखटों के लिए स्रोत मिल सकता है, यदि आपको एक गहरे स्तर पर कदम उठाना पड़ता है?

क्या आपके पास अपने संस्करण नियंत्रण प्रणाली में एक प्रतिबद्ध है जो इस बग का उत्पादन नहीं करता है? (आप संस्करण नियंत्रण का उपयोग कर रहे हैं आप नहीं हैं?) यदि आपके पास ऐसी कोई प्रतिबद्धता है, तो आप इतिहास पर एक द्विआधारी खोज कर सकते हैं ताकि यह पता लगाया जा सके कि बग कहाँ प्रस्तुत किया गया था।

आपके उद्देश्य (1) को समझने के लिए होना चाहिए - कारण और उस अंत को निर्धारित करें, (2) की जांच करने की कोशिश करें, एप्लिकेशन व्यवहार को विस्तार से समझें (3) इस समस्या को अलग कर इसे दूर करें और फिर उस डेल्टा की जांच और समझ करें सक्षम है कि आप ऐसा करने के लिए

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

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