विंडोज के लिए डिबगिंग टूल्स के साथ संयुक्त एप्लीकेशन वेरिफायर एक अद्भुत सेटअप है। आप विंडोज ड्राइवर किट या लाइटर विंडोज एसडीके के एक हिस्से के रूप में दोनों प्राप्त कर सकते हैं । ( ढेर भ्रष्टाचार के मुद्दे के बारे में पहले के प्रश्न पर शोध करते समय एप्लिकेशन वेरिफायर के बारे में पता चला ।) मैंने पिछले दिनों भी BoundsChecker और Insure ++ (अन्य उत्तरों में उल्लेखित) का उपयोग किया है, हालांकि मुझे आश्चर्य था कि Application Verifier में कितनी कार्यक्षमता थी।
इलेक्ट्रिक बाड़ (उर्फ "efence"), dmalloc , valgrind , और इसके आगे सब लायक उल्लेख कर रहे हैं, लेकिन इनमें से अधिकांश बहुत विंडोज की तुलना में * nix के तहत चलाने के लिए आसान होता है। Valgrind हास्यास्पद रूप से लचीला है: मैंने बड़े सर्वर सॉफ़्टवेयर को कई ढेर मुद्दों के साथ डीबग किया है जो इसका उपयोग कर रहा है।
जब अन्य सभी विफल हो जाते हैं, तो आप अपने स्वयं के वैश्विक ऑपरेटर को नए / डिलीट और मॉलोक / कॉलोक / रियललॉक ओवरलोड प्रदान कर सकते हैं - ऐसा करने के लिए कंपाइलर और प्लेटफॉर्म के आधार पर थोड़ा भिन्न होगा - और यह थोड़ा निवेश होगा - लेकिन यह लंबे समय से भुगतान कर सकता है। वांछनीय फीचर सूची को डलमॉक और इलेक्ट्रिकफेंस से परिचित होना चाहिए, और आश्चर्यजनक रूप से उत्कृष्ट पुस्तक राइटिंग सॉलिड कोड :
- संतरी मान : प्रत्येक संरेखण से पहले और बाद में थोड़ा अधिक स्थान की अनुमति दें, अधिकतम संरेखण आवश्यकता का सम्मान करना; मैजिक नंबरों से भरें (बफर ओवरफ्लो और अंडरफ्लो को पकड़ने में मदद करता है, और सामयिक "वाइल्ड" पॉइंटर)
- आबंटन भरण : एक जादू गैर-0 मान के साथ नए आबंटन भरें - विज़ुअल सी ++ डीबग बिल्ड में आपके लिए पहले से ही ऐसा करेगा (असिंचित संस्करण के उपयोग को पकड़ने में मदद करता है)
- मुक्त भरण : एक गैर-मान के साथ मुक्त मेमोरी में भरें, एक सेगफॉल्ट को ट्रिगर करने के लिए डिज़ाइन किया गया है यदि यह ज्यादातर मामलों में संदर्भित है (झूलने वाले बिंदुओं को पकड़ने में मदद करता है)
- देरी से मुक्त : ढेर के लिए मुक्त मेमोरी को कुछ समय के लिए वापस न करें , इसे मुफ्त भरा रखें लेकिन उपलब्ध नहीं है (अधिक झूलने वाले बिंदुओं को पकड़ने में मदद करता है, समीपवर्ती डबल-फ्रीज़ को पकड़ता है)
- ट्रैकिंग : रिकॉर्ड करना जहां एक आवंटन किया गया था, कभी-कभी उपयोगी हो सकता है
ध्यान दें कि हमारे स्थानीय होमब्रेव सिस्टम में (एक एम्बेडेड लक्ष्य के लिए) हम ट्रैकिंग को अन्य सामानों से अलग रखते हैं, क्योंकि रन-टाइम ओवरहेड बहुत अधिक है।
यदि आप इन आवंटन कार्यों / ऑपरेटरों को अधिभारित करने के लिए और अधिक कारणों में रुचि रखते हैं, तो मेरे जवाब पर नज़र डालें "वैश्विक ऑपरेटर को नए और अधिभारित करने का कोई कारण?" ; बेशर्म आत्म-प्रचार एक तरफ, यह अन्य तकनीकों को सूचीबद्ध करता है जो ढेर भ्रष्टाचार त्रुटियों, साथ ही अन्य लागू उपकरणों को ट्रैक करने में सहायक होते हैं।
चूँकि मैं अपने जवाब को यहाँ खोजता रहता हूँ जब एमएस / एलोकेशन / फ़्री / वैल्यू वैल्यू के लिए खोज करता है, तो यहाँ एक और जवाब है जो माइक्रोसॉफ्ट के डीबगर्स को भरता है ।