2009-04-28 15 views
16

क्या वालग्रिंड के साथ कोई ज्ञात झूठा सकारात्मक है? मुझे 'सशर्त कूद या चाल fmemopen फ़ंक्शन के साथ, प्रारंभिक मूल्य (ओं) पर निर्भर करता है, सी में लिखना और जीसीसी के साथ संकलन करना। क्या मुझे यकीन है कि यह असली है?क्या वालग्रिंड के साथ झूठी सकारात्मक समस्याएं ज्ञात हैं?

संपादित करें: क्या ऐसे मुद्दे हैं जो दमन फ़ाइलों में नहीं हैं? क्या कोई ऐसी चीज है जो किसी प्रोग्राम में कर सकती है, जो वास्तव में त्रुटियां नहीं हैं लेकिन वालग्रिंड कहेंगे कि वे हैं? यदि ज्ञात समस्याएं हैं, तो एक सूची अच्छी होगी।

उत्तर

13

हां, वालग्रिंड के साथ झूठे सकारात्मक झूठे हैं, यही कारण है कि इसमें विशेष ग्लिब और जीसीसी संस्करणों के लिए दमन फाइलें हैं, उदाहरण के लिए। झूठी सकारात्मक उत्पन्न हो सकती है यदि आप नए जीसीसी और ग्लिब के साथ पुराने वाल्ग्रिंड का उपयोग कर रहे हैं, यानी, ग्लिब 2.9 के साथ वैलग्रींड 3.3।

यह कहकर, आपको अभी भी समस्या को देखना है और यह पता लगाना है कि यह वास्तव में एक झूठा सकारात्मक है (यदि यह मामला सामने आता है, तो आप इसके लिए एक दमन लिख सकते हैं) या यह एक असली बग है आपके कार्यक्रम में

यहां क्या हो रहा है यह कहने का कोई तेज़ और आसान तरीका नहीं है, लेकिन इस मामले में मुझे संदेह होगा कि आप अपने कोड से पुस्तकालय कोड में अनियमित मूल्य पारित कर रहे हैं। Valgrind विकल्प --track-origins=yes आज़माएं। यह दिखाएगा कि अनियमित मूल्य कहां से आया था। यदि यह आपका कोड है, तो शायद आपको इसे प्रारंभ करना चाहिए। यदि यह पुस्तकालय के अंदर है, तो यह गलत सकारात्मक हो सकता है या फिर भी, लाइब्रेरी कॉल तर्कों के खराब मान इसे उत्पन्न कर सकते हैं, इसलिए उनको जांचें।

+0

मैं वास्तव में कैसे पता लगा सकता हूं कि यह गलत है या नहीं? –

+0

मैंने अपने उत्तर में कुछ पॉइंटर्स जोड़े हैं, उम्मीद है कि यह मदद करता है। –

+0

मैं कहूंगा कि सभी रिपोर्ट किए गए मुद्दे वास्तव में समस्याएं हैं जब तक आप निस्संदेह सत्यापित नहीं करते हैं कि यह है। किसी अन्य लाइब्रेरी में झूठी सकारात्मक या बग के रूप में कुछ भी खारिज करना आसान है या जो भी मुद्दा है, वास्तव में, आपके कोड में एक वास्तविक समस्या है। याद रखें: चयन शायद टूटा नहीं है ;-) बेशक, ऐसे मामले होंगे जब यह वास्तव में एक झूठी सकारात्मक है ... – Dan

2

वालग्रिंड कुछ डिफ़ॉल्ट त्रुटि दमन के साथ आता है, लेकिन वे सभी पुस्तकालयों को कवर करने के माध्यम से नहीं हैं।

त्रुटि जाँच उपकरण जैसे GNU सी पुस्तकालय के रूप में आधार पुस्तकालयों में कई समस्याओं का पता लगाते हैं, और X11 क्लाइंट लाइब्रेरी है, जो आने आपकी जीएनयू/लिनक्स सिस्टम पर पहले से स्थापित। आप इन्हें आसानी से ठीक नहीं कर सकते हैं, लेकिन आप इन त्रुटियों को नहीं देखना चाहते हैं (और हाँ, बहुत सारे हैं!) तो वालग्रिंड स्टार्टअप पर दबाने के लिए त्रुटियों की एक सूची पढ़ता है। जब सिस्टम बनाया गया है तो ./configure स्क्रिप्ट द्वारा एक डिफ़ॉल्ट दमन फ़ाइल बनाई गई है।

आप अपना खुद का error suppressions बना सकते हैं जो आपको पता है कि आपके कोड के लिए अप्रासंगिक है।

1

वैब्रिंड के साथ कुछ झूठी सकारात्मकताओं को ठीक करके प्रेरित डेबियन एसएसएल चीज नहीं थी?

+2

"झूठी सकारात्मक" से आपका क्या मतलब है इस पर निर्भर करता है। यह ओपनएसएसएल में अनियमित स्मृति का जानबूझकर उपयोग था, यादृच्छिकता के कई स्रोतों में से एक के रूप में। Valgrind इसके बारे में चेतावनी में पूरी तरह से सही था (भले ही यह हानिरहित था)। –

+4

@ बाफ बॉयोइस: यह हानिकारक नहीं था, क्योंकि डेबियन की कुख्यात बग साबित होती है।यदि डेबियन को शून्य पर बफर को गलत कुंजी पीढ़ी तोड़ दिया गया है, तो एक कंपाइलर बदलता है जिसमें स्टैक मेमोरी आवंटित की जाती है (या मैलोक में लाइब्रेरी में परिवर्तन, अगर यह ढेर से होता है) तो स्मृति आसानी से शून्य हो सकता है और ब्रेकिंग हो सकता है सुरक्षित कुंजी पीढ़ी। किसी भी उद्देश्य के लिए अनियमित स्मृति का उपयोग, जिसमें एन्ट्रॉपी प्राप्त करना शामिल है, एक गंभीर बग है। –

+2

@ आर: डेबियन बग यह नहीं था कि एक स्रोत के रूप में अनियमित स्मृति का उपयोग बंद करने के बाद उनके पास बहुत कम एन्ट्रॉपी छोड़ी गई थी। यह था कि, जब उन्होंने अनियमित स्मृति का उपयोग करना बंद करने की कोशिश की, तो उन्होंने गलत चीज को पछाड़ दिया और दुर्घटनाग्रस्त भी एंट्रॉपी के अन्य स्रोतों का उपयोग बंद कर दिया। बस अनियमित स्मृति को हटा देना ठीक रहेगा। –

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