2010-05-14 17 views
7
  1. 2008 से पोस्ट के अनुसार (मुझे अभी यह नहीं मिल रहा है), glibc heap check बहुप्रचारित वातावरण में काम नहीं करता है। क्या यह अभी भी 2010 में स्थिति है?
  2. डिफ़ॉल्ट रूप से ढेर जांच सक्षम है? (जीसीसी 4.1.2)? मैं MALLOC_CHECK_ सेट नहीं करता हूं, mcheck() को कॉल करने से अवगत नहीं हूं, लेकिन फिर भी कभी-कभी बैकट्रैक के साथ डबल फ्री ग्लिब त्रुटि प्राप्त होती है। शायद यह कुछ संकलन ध्वज द्वारा सक्षम है?
+1

उपयोग valgrind और सवाल कुछ हद तक विवादास्पद हो जाता है। http://valgrind.org/ – msw

+1

@msw valgrind अच्छा है और वे टकरा नहीं जाते हैं। MALLOC_CHECK_ वाल्ग्रिंड की तुलना में बहुत हल्का है और इसे सेट करने के बाद, किसी भी क्रिया frp, उपयोगकर्ता (उदाहरण के लिए lvalgrind के माध्यम से चल रहा ऐप, valgrind के आउटपुट की जांच) की आवश्यकता नहीं है। यह valgrind के साथ स्थिति नहीं है। किसी भी तरह, मेरा सवाल valgrind के बारे में नहीं था :) – dimba

उत्तर

3

डिफ़ॉल्ट रूप से, MALLOC_CHECK_ या mcheck(), glibc कुछ थोड़ा जांच करता है कि प्रदर्शन को चोट नहीं करता है, दो बार मुक्त बुला() एक ही स्मृति हिस्सा पर की तरह होता है का उपयोग किए बिना। यही कारण है कि आप इनमें से कुछ संदेश प्राप्त कर रहे हैं, लेकिन आपके पास मॉलोक विकल्प एपीआई द्वारा प्रदान किए गए सभी संदेश नहीं होंगे, जिन्हें आप MALLOC_CHECK_ (जो कि अधिक परीक्षण कर रहे हैं, लेकिन बहुत अधिक सीपीयू गहन भी कर रहे हैं) का उपयोग कर प्राप्त कर सकते हैं। आप इसे एक त्रुटि ट्रिगर करके जांच सकते हैं, और इसे malloc_check_ के साथ और बिना परीक्षण कर सकते हैं। उदाहरण के लिए, एक साधारण डबल-फ्री() के लिए, जब भी मैं MALLOC_CHECK_ सेट करता हूं, तो मुझे "डबल फ्री या भ्रष्टाचार (शीर्ष)" या "मुक्त(): अमान्य सूचक" त्रुटियां मिलती हैं।

1/प्रश्न का उत्तर देने के लिए, mcheck malloc hooks पर निर्भर करता है क्योंकि वे मौजूद हैं (जैसे 15 वर्ष), और वे थ्रेड सुरक्षित होने का इरादा नहीं रखते हैं।

सूत्रों का कहना है: glibc/malloc/malloc.c, http://sourceware.org/bugzilla/show_bug.cgi?id=9939

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