2012-02-14 15 views
17

मुझे अपने ऐप के लिए एक गतिशील कॉल ग्राफ़ चाहिए। मैं इसे callgrind उपकरण (valgrind सूट) के साथ चलाता हूं और callgrind.out.xxxxx फ़ाइल प्राप्त करता है। अब, मैं इस डेटा का ग्राफिकल प्रतिनिधित्व करना चाहता हूं। KCacheGrind मुझे बहुत मदद नहीं करता है क्योंकि यह ग्राफ का एक सीमित हिस्सा खींचता है (~ 1500 प्रोफाइल के बजाय ~ 50 कार्यों को खींचता है और मुझे नहीं पता कि इसे कैसे ठीक किया जाए)। मैं एक ग्राफ छवि कैसे प्राप्त कर सकता हूं जहां सभी कार्यों को खींचा जाएगा?कॉलग्रिंड डेटा की व्याख्या करना

+0

कि ग्राफ में कमी है डेटा का उपयोग कर gprof2dot है callgrind.out शामिल थे? साथ ही, यदि आप "स्वयं" द्वारा क्रमबद्ध करते हैं, तो क्या संबंधित समय/निर्देश शेष हैं जो फ़ंक्शंस में सूचीबद्ध नहीं हैं? मुझे ऐसे मामले को याद नहीं किया जा सकता है जहां प्रासंगिक भागों को छोड़ दिया गया था। –

+0

हां, callgrind.out में मुझे आवश्यक सभी डेटा शामिल हैं (ग्राफ़ में अनुपलब्ध फ़ंक्शंस सहित) और ग्राफ में सूचीबद्ध अधिकांश फ़ंक्शंस में प्रासंगिक समय/निर्देश व्यतीत किए गए हैं। पता नहीं क्यों 'KCacheGrind' इसका केवल एक हिस्सा खींचता है। यूपीडी: यदि मैं फ़ंक्शंस को चुनता हूं जो मैं फ़ंक्शंस की सूची में चाहता हूं (बाईं ओर स्थित 'KCacheGrind' लेआउट में बाईं ओर रखा गया है) तो ग्राफ़ को इस फ़ंक्शन को प्रदर्शित करने के लिए फिर से खींचा जाता है, लेकिन फिर भी दूसरों को याद आती है। मुझे एक बार में पूरे ग्राफ की जरूरत है। अग्रिम में धन्यवाद। – maverik

उत्तर

22

ठीक है, मुझे रास्ता मिल गया है। उत्पन्न callgrind.out फ़ाइल gprof2dot का उपयोग कर dot फ़ाइल में कनवर्ट कर सकते हैं (हाँ, यह टूल callgrind फ़ाइलों को भी पार्स कर सकता है)। और फिर आप dot -T<type> dotfile.dot -o graphfile.<type>

+0

दिलचस्प। जेनरेट ग्राफ 1500 कार्यों के लिए पठनीय है? –

+0

सौदा यह है कि वास्तव में मुझे दो ग्राफों के सॉफ़्टवेयर के दो अलग-अलग संस्करणों की तुलना करने की आवश्यकता है, इसलिए पूरे ग्राफ को पढ़ने/समझने का कोई उद्देश्य नहीं है, मुझे केवल कुछ पथ चाहिए और मुझे पता है कि मुझे उन्हें कहां देखना चाहिए। ओटीओएच, पीढ़ी 'पीएनजी' छवि में मेरे 'कोर i7-2600 3.4GHz/8 जीबी डीडीआर 3' पर लगभग 5 मिनट लगते हैं जिसके परिणामस्वरूप फ़ाइल का आकार 23 एमबीइट होता है। सभी छवि दर्शक इसे तेज़ और सही तरीके से संभाल नहीं सकते हैं (सही तनाव परीक्षण आईएमओ :)) – maverik

+0

क्या हमें वास्तव में '-T ' टाइप करना चाहिए? या क्या हम कुछ के साथ ' 'को प्रतिस्थापित करते हैं? – nmz787

16

का उपयोग कर उत्पन्न करने के लिए निम्न आदेश का उपयोग करना ग्राफ छवि प्राप्त कर सकते हैं graph.png

$./gprof2dot.py --format=callgrind --output=out.dot /tmp/cachegrind.out.1360843301.16101 

$dot -Tpng out.dot -o graph.png 
संबंधित मुद्दे