यह सुनिश्चित करने का कोई तरीका नहीं है कि विभिन्न प्रकार के अपरिभाषित व्यवहार (विशेष रूप से दौड़ की स्थिति में) मौजूद नहीं हैं।
हालांकि, ऐसे कई उपकरण हैं जो इस तरह की स्थितियों की एक अच्छी संख्या दिखाते हैं। आप यह साबित करने में सक्षम हो सकते हैं कि इस तरह के उपकरणों के साथ एक समस्या वर्तमान में मौजूद है, भले ही आप यह साबित नहीं कर सकते कि आपका फिक्स वैध है।
इस उद्देश्य के लिए कुछ दिलचस्प उपकरण:
Valgrind एक मेमोरी चेकर है। यह मेमोरी लीक, अनइंस्टॉल की गई मेमोरी की रीडिंग, लटकने वाले पॉइंटर्स का उपयोग और आउट-ऑफ-बाउंड एक्सेस का पता लगाता है।
हेलग्रिंड एक थ्रेड सेफ्टी चेकर है। यह दौड़ की स्थिति का पता लगाता है।
दोनों डायनेमिक इंस्ट्रूमेंटेशन द्वारा काम करते हैं, यानी वे आपके प्रोग्राम को जैसे-तैसे लेते हैं और इसे वर्चुअलाइज्ड वातावरण में निष्पादित करते हैं। यह उन्हें अचूक बनाता है, लेकिन धीमी गति से।
UBSan एक अपरिभाषित व्यवहार चेकर है। यह C और C ++ के अपरिभाषित व्यवहार के विभिन्न मामलों का पता लगाता है, जैसे पूर्णांक ओवरफ्लो, आउट-ऑफ-रेंज शिफ्ट और इसी तरह के सामान।
MSan एक मेमोरी चेकर है। इसका वैलेग्रिंड के समान लक्ष्य है।
TSan एक थ्रेड सुरक्षा चेकर है। हेलग्रिंड के समान इसके लक्ष्य हैं।
इन तीनों को क्लैंग कंपाइलर में बनाया गया है और यह संकलन समय पर कोड जनरेट करता है। इसका मतलब है कि आपको उन्हें अपनी बिल्ड प्रक्रिया में एकीकृत करने की आवश्यकता है (विशेष रूप से, आपको क्लैंग के साथ संकलन करना होगा), जिससे उन्हें शुरू में पीसने की तुलना में बहुत कठिन हो जाता है, लेकिन दूसरी तरफ उनके पास बहुत कम रनवे ओवरहेड होता है।
मेरे द्वारा सूचीबद्ध सभी उपकरण लिनक्स पर और उनमें से कुछ मैकओएस पर काम करते हैं। मुझे नहीं लगता कि विंडोज पर अभी तक कोई काम किया गया है।