2012-11-27 29 views
10

मैं सेंटोस रिपोजिटरी से मानक जीसीसी 4.4 पैकेज का उपयोग कर 64-बिट सेंटोस 5.8 पर एक स्थिर रूप से जुड़े 64-बिट सी ++ एप्लिकेशन का विकास कर रहा हूं। ऐसा लगता है कि मैं अपेक्षा से अधिक स्मृति का उपयोग कर रहा हूं, इसलिए मैंने मेमोरी उपयोग को प्रोफ़ाइल उपयोग करने के लिए मासफ का उपयोग करने की कोशिश की। मैं डिबग जानकारी के साथ तैयार की है और फिर से चलाने केवालग्रिंड का मासेफ टूल मेरे आवेदन को प्रोफाइल नहीं करेगा

valgrind --tool = निर्देशिका जहां MyProg रहता से पुंजक ./MyProg

। यह निम्नलिखित massif.out.XXXX उदाहरण के अलावा किसी भी परिणाम का उत्पादन नहीं करता है।

desc: (none) 
cmd: ./MyProg 
time_unit: i 
#----------- 
snapshot=0 
#----------- 
time=0 
mem_heap_B=0 
mem_heap_extra_B=0 
mem_stacks_B=0 
heap_tree=empty 

ध्यान दें कि फ़ाइल की पूरी सामग्री है और मेरा प्रोग्राम कई मिनट तक चला सकता है।

मैंने वाल्ग्रिंड और मासफाई के लिए विभिन्न विकल्पों का कोई फायदा नहीं लिया है। मैंने माईप्रोग के पूर्ण पथ का उपयोग करने की भी कोशिश की, बस मामले में। मैंने वैलग्रींड (3.8.1) का सबसे हालिया स्थिर संस्करण डाउनलोड करने और उसी संकलन के साथ संकलन और चलाने (जैसे CentOS 3.5.0 का उपयोग कर रहा है) डाउनलोड करने का प्रयास किया है। एक मानसिक स्वास्थ्य की जांच के रूप में मैं

-l

valgrind --tool = पुंजक ls भाग गया और उम्मीद के रूप में यह गैर शून्य स्मृति के उपयोग के साथ कई स्नैपशॉट का उत्पादन किया।

मैंने उन खोजशब्दों के प्रत्येक संयोजन का उपयोग करके ऑनलाइन खोज करने का प्रयास किया है, लेकिन मुझे कोई भी समस्या नहीं मिली।

एक साइड नोट के रूप में, यदि उपयोगी सूचना है तो मैं valgrind के डिफ़ॉल्ट memcheck टूल का उपयोग करके एप्लिकेशन को सफलतापूर्वक प्रोफाइल कर सकता हूं।

क्या किसी को पता है कि Massif मेरे आवेदन को प्रोफ़ाइल करने में विफल क्यों होगा?

+0

क्या आपका प्रोग्राम स्थैतिक रूप से जुड़ा हुआ है? यदि आप 'ldd ./MyProg' करते हैं, तो क्या यह साझा पुस्तकालयों का एक समूह सूचीबद्ध करता है, या यह कुछ भी प्रिंट नहीं करता है? –

+0

यह स्थिर रूप से जुड़ा हुआ है। मैंने इसे स्पष्ट करने के लिए प्रश्न संपादित किया है। – Tyson

उत्तर

9

यदि आवेदन स्थैतिक रूप से जुड़ा हुआ है, तो इसका मूल्यांकन valgrind का उपयोग करके नहीं किया जा सकता है। वालग्रिंड आपके प्रोग्राम में आवंटन कार्यों का अपना संस्करण प्रदान करके काम करता है, जो गतिशील लुकअप को ओवरराइड करके पूरा करता है।

यदि आप गतिशील रूप से मानक पुस्तकालयों (libc और libstdC++) से लिंक कर सकते हैं, तो संभवतः यह उस स्मृति विश्लेषण को करने में सक्षम होना चाहिए जिसे आप ढूंढ रहे हैं।

Valgrind FAQ:

दूसरा से, अगर आपके प्रोग्राम स्थिर जुड़ा हुआ है, सबसे वेलग्रिंड औजार के रूप में अच्छी तरह से काम नहीं करेगा, क्योंकि वे के साथ इस तरह malloc जैसे कुछ फ़ंक्शन को बदलने के लिए, सक्षम नहीं होगा उनके अपने संस्करण

+0

धन्यवाद। मैं एफएक्यू के उस हिस्से को याद किया। आंशिक गतिशील लिंकिंग में बदलने के बाद मैं एक प्रोफाइल प्राप्त करने में सक्षम हूं। – Tyson

+0

वालग्रींड-उपयोगकर्ता मेलिंग सूची पर एक [वार्तालाप] (http://thread.gmane.org/gmane.comp.debugging.valgrind/12653) के आधार पर, valgrind संस्करण 3.8.1 से स्थिर रूप से जुड़े अनुप्रयोगों का विश्लेषण करने में सक्षम होना चाहिए पर। मेलिंग सूची पर अनुरोध के रूप में मैंने इस बारे में एक [बग] (https://bugs.kde.org/show_bug.cgi?id=311093) दायर किया है। – Tyson