2008-10-03 12 views
22

मुझे मेमोरी लीक से भरा एक बड़ा सी ++ कोडबेस बनाए रखने के लिए कहा गया है। चारों ओर घूमते हुए, मुझे पता चला कि हमारे पास बहुत सारे बफर ओवरफ्लो हैं जो लीक की ओर ले जाते हैं (यह कैसे बुरा हुआ, मैं कभी नहीं जानना चाहता)।क्या सी/सी ++ उपकरण बफर ओवरफ्लो के लिए जांच सकते हैं?

मैंने पहले बफर ओवरफ्लो को हटाने का निर्णय लिया है। बग-शिकार को आसान बनाने के लिए, बफर ओवररन्स की जांच के लिए कौन से टूल्स का उपयोग किया जा सकता है?

उत्तर

1

विजुअल स्टूडियो में एक/जीएस कंपाइलर ध्वज है जो बफर ओवरफ्लो सुरक्षा जोड़ता है। क्या कोई और है?

26

लिनक्स पर मैं वालग्रिंड का उपयोग करता हूं।

+0

दिलचस्प। मैं देखूंगा कि क्या यह कोडबेस लिनक्स पर संकलित कर सकता है जब मैं ठीक करने के लिए कुछ और नहीं सोच सकता (हालांकि, मुझे अत्यधिक संदेह है)। उपरोक्त क्योंकि किसी और को आपका उत्तर उपयोगी हो सकता है। – MrValdez

+0

यह केवल बफर ओवरफ़्लो के लिए एक ओवरकिल है ... – PierreBdR

+2

बफर ओवरफ़्लो एक बहुत ही बुरा बग है क्योंकि प्रभाव आवश्यक रूप से कारण के करीब नहीं हैं (यानी यह बाद में 500 लाइनों को क्रैश कर सकता है)। यदि स्टैक टूट जाता है तो आपको डिबगिंग प्राप्त करने में आपकी सहायता की आवश्यकता होगी। यह वह जगह है जहां वालग्रिंड चमकता है - जैसे ही यह होता है, यह ओवरफ्लो जालता है। – diciu

1

आप Visual Leak Detector का प्रयास कर सकते हैं - मैंने इसे स्वयं इस्तेमाल किया, और यह पहली चीज है जिसे मैं मेम-लीक पहचान के लिए अनुशंसा करता हूं।

3

/जीएस के साथ समस्या यह वास्तव में बग के लिए स्कैन नहीं करेगा। इस तथ्य के बाद यह आपको सतर्क करेगा। ऐसा लगता है कि आप ऐसे टूल की तलाश में हैं जो संभावित बफर के लिए/मौजूदा रनों के लिए आपके मौजूदा कोड को स्कैन करेगा।

इसके लिए एक अच्छा उपकरण, और अन्य दोष, माइक्रोसॉफ़्ट प्रीफास्ट टूल है।

Information here

+0

पृष्ठ – crashmstr

+0

पर लिंक को मिस कर रहा है धन्यवाद, एंकर टैग में त्रुटि। – JaredPar

8

आईबीएम की शुद्ध ऐसा करेंगे, तो आप इसे के तहत अपने एप्लिकेशन को चलाने के लिए और इसे आप (अन्य लोगों सहित) सभी त्रुटियों की एक रिपोर्ट दे देंगे।

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

+0

यह जानना अच्छा है कि यह विंडोज 7 x64 पर नहीं चलता है। – sorin

4

electric-fence पर जांचें, यह केवल बफर ओवरफ़्लो के लिए डिज़ाइन किया गया है! यह कोड को धीमा नहीं करता है (लेकिन आवंटन/डिलोकेशन धीमा कर देता है)। यह काम करता है और लिनक्स और खिड़कियां।

यह प्रत्येक आवंटित स्थान से पहले और बाद में कोई भी पढ़ने या लिखने के बिना किसी सेगमेंट को जोड़कर काम करता है। इस स्मृति को यूनिक्स पर सेगमेंटेशन गलती और विंडोज़ पर एक स्मृति उल्लंघन (या कुछ समान) के रूप में समाप्त करने का प्रयास करना।

+3

404 आपके लिंक पर नहीं मिला। – oob

+0

स्रोत हैं [यहां] (https://code.google.com/p/electric-fence-win32/)। जाहिर है, इसे [DUMA] (http://duma.sourceforge.net/) द्वारा –

2

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

+0

विंडोज़ पर उपलब्ध है –

1

मैं जोकन कलंबच द्वारा कोडप्रोजेक्ट पर मुफ्त "लीकफाइंडर" टूल की अनुशंसा करता हूं। इस memory leak question

3

एमएस पर (और अन्य उत्तर) इस सूत्र के बारे में अधिक जानकारी के लिए मेरी पोस्ट देखें:

  • UMDH.exe उपकरण: http://support.microsoft.com/kb/268343
  • /विश्लेषण संकलक विकल्प ( नवीनतम Microsoft से मुक्त एसडीके)
+0

अच्छा! लेकिन रनटाइम आधारित। एक बड़े कोड बेस * के साथ (सी केस में सी में लिखा गया है) * आप मुख्य रूप से डिजाइन किए जाने के तरीके के लिए अपने प्रोग्राम का परीक्षण करेंगे। मेमोरी रिसाव शोषण खोजने के लिए एक हमलावर कोड पढ़ने पर कई हजारों घंटे आवश्यक हो सकता है। मैं जावास्क्रिप्ट के लिए मौजूद स्रोत के समान स्रोत कोड विश्लेषण के लिए एक स्वचालित उपकरण की अपेक्षा करता। – user2284570

10

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

उल्लेख किए गए उपकरणों के साथ मेमोरी लीक की खोज करना एक अच्छा विचार है, लेकिन मानक स्ट्रिंग्स और कंटेनर कक्षाओं का उपयोग करते समय उन्हें सभी संभावित रिसाव नहीं मिल सकते हैं, जो आपको नहीं पता था।

+0

यह सी – user2284570

0

विंडोज़ पर मेमोरी लीक/बफर लगने और अन्य रनटाइम त्रुटि का पता लगाने के लिए आप का उपयोग कर सकते हैं:

मैं वे लायक लगता है कि उनके कीमत अगर आपके पास बड़ी परियोजनाएं हैं जिन्हें क्लीनअप की आवश्यकता है।

2

Compuware's Devpartner के बाउंड चेकर घटक गतिशील निष्पादन के मामले में यह बहुत अच्छा है। स्थैतिक परीक्षण के लिए, मैं उपयोगिता और रिपोर्टिंग के लिए pc-lint and flex-lintRiverblade's visual lint तक अनुशंसा करता हूं। यदि आपको एक नया कोड बेस दिया गया है, तो मैं उचित विश्लेषण के साथ स्थिर विश्लेषण के साथ शुरू करने की सलाह दूंगा ताकि आप केवल गंदे सामान को पकड़ सकें। जैसे ही कोडबेस सुधारता है आप नियम सेट को कस कर सकते हैं।

आप पर विंडोज मोबाइल/विंडोज सीई यह करने के लिए की जरूरत है, Entrek's code snitch

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

3

मुझे आश्चर्य है कि विंडोज़ पर Application Verifier (free!) का उल्लेख नहीं किया गया है। विजुअल लीक डिटेक्टर (किसी अन्य उत्तर में उल्लिखित) कई प्रकार की मेमोरी रिसाव को ट्रैक करने के लिए बिल्कुल अद्भुत है, लेकिन एप्लिकेशन सत्यापनकर्ता बफर ओवररन्स, डबल फ्री, और बफर के उपयोग के बाद मेमोरी त्रुटियों को ट्रैक करने के लिए शीर्ष कुत्ता है (साथ ही कई, कई और)।

संपादित करें: और यह उपयोग करना बहुत आसान है।

+0

के लिए काम नहीं करेगा अच्छा! लेकिन रनटाइम आधारित। एक बड़े कोड बेस * के साथ (सी केस में सी में लिखा गया है) * आप मुख्य रूप से डिजाइन किए जाने के तरीके के लिए अपने प्रोग्राम का परीक्षण करेंगे। मेमोरी रिसाव शोषण खोजने के लिए एक हमलावर कोड पढ़ने पर कई हजारों घंटे आवश्यक हो सकता है। मैं जावास्क्रिप्ट के लिए मौजूद स्रोत के समान स्रोत कोड विश्लेषण के लिए एक स्वचालित उपकरण की अपेक्षा करता। – user2284570

2

मेरी कंपनी, Semantic Designs रनटाइम memory safety checker (बफर ओवररन्स समेत) के लिए बीटा टेस्टर्स की तलाश में है जो सभी प्रकार के मेमोरी एक्सेस उल्लंघनों का पता लगाता है, यहां तक ​​कि जो लोग वाल्ग्रिंड और शुद्ध नहीं कर सकते हैं। यह वर्तमान में केवल विंडोज सी प्रोग्राम के लिए है, सी ++ या अन्य ओएस नहीं।

1 जून, 2011 को संपादित करें: चेकपॉइंटर उपकरण उत्पादन चला गया है। अभी भी सी/विंडोज़। एकाधिक सी बोलीभाषा संभाल: एमएस विजुअल सी, जीसीसी 3/4।

संपादित करें 5 मई, 2012: चेकपॉन्टर अब मानक सी और सी 99 पुस्तकालयों पर कॉलिंग कॉल सहित सी 99 को संभालता है।

संबंधित मुद्दे