2012-06-28 32 views
15

मैं निम्नलिखित मानकों के साथ Valgrind चलाएँ:वालग्रिंड से पूर्ण कॉल स्टैक कैसे प्राप्त करें?

--leak-check=full --show-reachable=yes --leak-resolution=high --num-callers=100 --trace-children=yes 

मेमोरी लीक में प्रवेश करें, तो मैं पूरी ढेर के साथ कुछ त्रुटि संदेश मिलते मुख्य अप करने के लिए पता लगा, लेकिन कुछ संदेशों ऐसा दिखाई देगा:

==3956== 1,999,140 (68,796 direct, 1,930,344 indirect) bytes in 5,733 blocks are definitely lost in loss record 8,842 of 8,845 
==3956== at 0x4022AB8: malloc (vg_replace_malloc.c:207) 
==3956== 

कैसे क्या मैं इन त्रुटियों के लिए पूर्ण स्टैक ट्रेस प्राप्त कर सकता हूं?

+0

वालग्रिंड का अंतिम रिलीज़ संस्करण केवल 50 तक - नॉन-कॉलर्स का समर्थन करता है। इसलिए, यह स्पष्ट नहीं है कि आप किस संस्करण का उपयोग कर रहे हैं। उपरोक्त स्टैक ट्रेस अपूर्ण दिखता है। यह आपके एप्लिकेशन को संकलित करने के तरीके से जोड़ा जा सकता है (उदाहरण के लिए विकल्प -फॉमिट-फ्रेम-पॉइंटर स्टैक ट्रेस को उत्पादन करना अधिक कठिन बना सकता है) – phd

+0

टक्कर। (stackoverflow "टक्कर" पद करता है?) वही समस्या। -g के साथ एक आवेदन संकलन। यह malloc() से घिरा हुआ एक स्टैक ट्रेस के साथ संभावित मेमोरी लीक दिखाता है, जो मॉलोक(), और फिर मुख्य() नामक फ़ंक्शन, बीच में सब कुछ छोड़कर, मुख्य फ़ाइल() के समान फ़ंक्शन सहित फ़ंक्शंस को छोड़ देता है। ?? मैं ऑनलाइन उदाहरण देखता हूं जिसमें यह 3 स्टैक फ्रेम सीमा नहीं है .. ?? कोई विचार? – Samuel

+0

मैं उबंटू 13.10 पर वैल्रिंड 3.8.1 का उपयोग कर रहा हूं और स्टैक निशान देखता हूं जिसमें सभी इंटरमीडिएट कॉल नहीं होते हैं। जीसीसी के साथ संकलन करते समय कोई ऑप्टिमाइज़ेशन नहीं है (या शायद मुझे चाहिए- ओजी या कुछ ...) – thoni56

उत्तर

14

पूर्ण स्टैक ट्रेस प्राप्त करने के लिए सभी पुस्तकालयों/निष्पादन योग्यों के लिए डीबग प्रतीकों की आवश्यकता होगी जो कि रिसाव में शामिल हो सकते हैं (और --num-callers द्वारा निर्धारित सीमाओं के भीतर)।

यदि आप उनमें से कोई भी निर्माण कर रहे हैं, तो आपको -g जीसीसी (या किसी अन्य कंपाइलर में प्रासंगिक ध्वज) में ध्वज निर्दिष्ट करने की आवश्यकता है।

ध्यान दें कि सरल नहीं है, और कभी कभी लीक याद आती है या (आप धागे जटिल class कार्यान्वयन का उपयोग कर रहे हैं, या विशेष रूप से अगर) पूर्ण स्टैक ट्रेस प्रदान करने में असमर्थ हो सकता है।

डीबग जानकारी के बिना पुस्तकालयों के लिए, उस पुस्तकालय में स्टैक ट्रेस रुक जाएगा।

एक मुफ्त उपकरण के लिए, यह क्या करता है, इस पर बहुत अच्छा है, लेकिन आईबीएम बड़े पैसे के लिए मेमोरी प्रोफाइल बेच सकता है।

+6

धन्यवाद, मेरे मामले में मुझे सिर्फ --num-callers विकल्प को समायोजित करना पड़ा। डिफ़ॉल्ट 12 होना प्रतीत होता है, जो एसटीएल और इसी तरह के लिए बहुत कम है। – cib

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