यदि आप सी, ऑब्जेक्टिव-सी या सी ++ में कोड रखते हैं, तो आप अपने स्रोत की आलोचना करने के लिए क्लैंग स्टेटिक एनालाइजर का उपयोग कर सकते हैं ।
कुछ मेमोरी डिबगिंग टूल उपलब्ध हैं: ValGrind, Mac OS X पर गार्ड मलोक, * NIX पर इलेक्ट्रिक फेंस।
कुछ विकास वातावरण डिबगिंग मेमोरी एलोकेटर का उपयोग करने का विकल्प प्रदान करते हैं, जो सामान को नव आबंटित पृष्ठों और नए मुक्त पृष्ठों को कचरे से भर देता है, असंबद्ध बिंदुओं को मुक्त करने का पता लगाता है, और प्रत्येक ढेर ब्लॉक के पहले और बाद में कुछ डेटा लिखता है, डीबगर के साथ। कहा जाता है कि उस डेटा का ज्ञात पैटर्न कभी बदलता है।
Slashdot पर कुछ आदमी ने कहा कि वह एक डिबगर में स्रोत की एकल-नई कदम से बहुत अधिक मूल्य प्राप्त करता है। "यह बात है" उन्होंने कहा। मैं हमेशा उनकी सलाह का पालन नहीं करता, लेकिन जब मैंने किया है तो यह मेरे लिए बहुत मददगार रहा है। यहां तक कि अगर आपके पास एक परीक्षण मामला नहीं है जो एक असामान्य कोड पथ को उत्तेजित करता है, तो आप इस तरह के पथ लेने के लिए अपने डिबगर में एक चर को घुमा सकते हैं, कुछ स्मृति आवंटित करके कह सकते हैं, फिर अपने नए सूचक को NULL के बजाय सेट करने के लिए डीबगर का उपयोग कर सकते हैं स्मृति पता, फिर आवंटन विफलता हैंडलर के माध्यम से कदम।
अभिकथन का प्रयोग करें - C, C ++ और Objective-C में अभिकारक () मैक्रो। यदि आपकी भाषा मुखर कार्य प्रदान नहीं करती है, तो अपने आप को लिखें।
उदारतापूर्वक मुखरता का उपयोग करें, फिर उन्हें अपने कोड में छोड़ दें। मैं जोर देता हूं () "परीक्षण जो परीक्षण करता रहता है"। मैं अपने अधिकांश कार्यों के प्रवेश बिंदु पर पूर्व शर्त की जांच करने के लिए आमतौर पर उनका उपयोग करता हूं। यह "अनुबंध द्वारा प्रोग्रामिंग" का एक हिस्सा है, जिसे एफिल प्रोग्रामिंग भाषा में बनाया गया है। दूसरा हिस्सा पोस्टकॉन्डेशन्स है, जो कि फंक्शन रिटर्न पॉइंट्स पर एस्सर () का उपयोग कर रहा है, लेकिन मुझे लगता है कि मुझे इसमें से ज्यादा माइलेज नहीं मिलता है।
आप वर्ग के आक्रमणकारियों की जांच के लिए मुखर का उपयोग भी कर सकते हैं। जबकि किसी भी वर्ग को कड़ाई से किसी भी अपरिवर्तनीय की आवश्यकता नहीं होती है, सबसे समझदारी से डिजाइन की गई कक्षाएं उनके पास होती हैं। एक वर्ग अशुभ कुछ शर्त है जो हमेशा सदस्य कार्यों के अंदर के अलावा अन्य सत्य है जो अस्थायी रूप से आपकी वस्तु को असंगत स्थिति में डाल सकती है। ऐसे कार्यों को हमेशा लौटने से पहले स्थिरता को बहाल करना चाहिए।
इस प्रकार प्रत्येक सदस्य फ़ंक्शन प्रविष्टि और निकास पर इन्वर्टर की जांच कर सकता है, और क्लास चेकइनवेरेंट नामक फ़ंक्शन को परिभाषित कर सकता है जिसे कोई भी अन्य कोड किसी भी समय कॉल कर सकता है।
कोड सोर्स टूल का उपयोग करके यह जांच लें कि आपके स्रोत की कौन-सी रेखाएं वास्तव में परीक्षण कर रही हैं, फिर अन-टेस्टेड लाइनों को उत्तेजित करने वाले डिजाइन टेस्ट करें। उदाहरण के लिए, आप अपने ऐप को वीएम के अंदर चलाकर कम मेमोरी हैंडलर की जांच कर सकते हैं जो कि थोड़ी भौतिक मेमोरी के साथ कॉन्फ़िगर किया गया है, और या तो कोई स्वैप फ़ाइल या बहुत छोटा नहीं है।
(किसी कारण से मैं कभी भी प्राइवेट नहीं था, जबकि बीओएस स्वैप फाइल के बिना चल सकता था, यह उस तरह से बहुत ही अकल्पनीय था। बीएफएस फाइलसिस्टम लिखने वाले डॉमिनिक गिआम्पोलो ने मुझसे आग्रह किया कि मैं कभी भी स्वैप के साथ बीओएस को न चलाऊं। देखें कि यह क्यों मायने रखता है, लेकिन यह किसी तरह का कार्यान्वयन कलाकृतियों रहा होगा।)
आपको I / O त्रुटियों के लिए अपने कोड की प्रतिक्रिया का भी परीक्षण करना चाहिए। अपनी सभी फ़ाइलों को एक नेटवर्क शेयर पर संग्रहीत करने का प्रयास करें, फिर अपने नेटवर्क केबल को डिस्कनेक्ट करें जबकि आपके ऐप में उच्च कार्यभार है। इसी तरह केबल को डिस्कनेक्ट करें - या अपने वायरलेस को बंद करें - यदि आप किसी नेटवर्क पर संचार कर रहे हैं।
एक बात जो मुझे विशेष रूप से अचंभित करने वाली लगती है, वे हैं वेबसाइट्स जिनमें जावास्क्रिप्ट कोड मजबूत नहीं है। फेसबुक के पृष्ठों में दर्जनों छोटी जावास्क्रिप्ट फाइलें लोड होती हैं, लेकिन यदि उनमें से कोई भी डाउनलोड करने में विफल रहता है, तो पूरा पेज टूट जाता है। बस किसी तरह से या तो कुछ दोष सहिष्णुता प्रदान करना है, एक डाउनलोड को पुनः प्रयास करके, या जब आपकी कुछ स्क्रिप्ट डाउनलोड नहीं हुई तो कुछ प्रकार की उचित वापसी प्रदान करना है।
डिबगर के साथ या "किल -9" पर अपने ऐप को * NIX पर मारने की कोशिश करें, जबकि यह एक बड़ी, महत्वपूर्ण फ़ाइल लिखने के बीच में सही है। यदि आपका ऐप अच्छी तरह से आर्किटेक्चर में है, तो पूरी फाइल लिखी जाएगी या बिल्कुल भी नहीं लिखी जाएगी, या हो सकता है कि यह केवल आंशिक रूप से लिखी गई हो, जो लिखा है वह दूषित नहीं होगी, किस डेटा के साथ जो पूरी तरह से उपयोग करने योग्य है उसे सहेजा जा रहा है फ़ाइल को फिर से पढ़ने पर एप्लिकेशन।
डेटाबेस में हमेशा दोष-सहिष्णु डिस्क I / O होता है, लेकिन शायद ही किसी अन्य प्रकार का ऐप होता है। जबकि जर्नलेड फाइलसिस्टम बिजली की विफलता या क्रैश की स्थिति में फाइलसिस्टम भ्रष्टाचार को रोकते हैं, वे एंड-यूजर डेटा के भ्रष्टाचार या नुकसान को रोकने के लिए कुछ भी नहीं करते हैं। यह उपयोगकर्ता अनुप्रयोगों की जिम्मेदारी है, लेकिन शायद ही डेटाबेस के अलावा कोई अन्य गलती-सहिष्णुता को लागू करता है।