मुझे अपने ऐप के लिए एक गतिशील कॉल ग्राफ़ चाहिए। मैं इसे callgrind
उपकरण (valgrind
सूट) के साथ चलाता हूं और callgrind.out.xxxxx
फ़ाइल प्राप्त करता है। अब, मैं इस डेटा का ग्राफिकल प्रतिनिधित्व करना चाहता हूं। KCacheGrind
मुझे बहुत मदद नहीं करता है क्योंकि यह ग्राफ का एक सीमित हिस्सा खींचता है (~ 1500 प्रोफाइल के बजाय ~ 50 कार्यों को खींचता है और मुझे नहीं पता कि इसे कैसे ठीक किया जाए)। मैं एक ग्राफ छवि कैसे प्राप्त कर सकता हूं जहां सभी कार्यों को खींचा जाएगा?कॉलग्रिंड डेटा की व्याख्या करना
उत्तर
ठीक है, मुझे रास्ता मिल गया है। उत्पन्न callgrind.out
फ़ाइल gprof2dot का उपयोग कर dot
फ़ाइल में कनवर्ट कर सकते हैं (हाँ, यह टूल callgrind
फ़ाइलों को भी पार्स कर सकता है)। और फिर आप dot -T<type> dotfile.dot -o graphfile.<type>
दिलचस्प। जेनरेट ग्राफ 1500 कार्यों के लिए पठनीय है? –
सौदा यह है कि वास्तव में मुझे दो ग्राफों के सॉफ़्टवेयर के दो अलग-अलग संस्करणों की तुलना करने की आवश्यकता है, इसलिए पूरे ग्राफ को पढ़ने/समझने का कोई उद्देश्य नहीं है, मुझे केवल कुछ पथ चाहिए और मुझे पता है कि मुझे उन्हें कहां देखना चाहिए। ओटीओएच, पीढ़ी 'पीएनजी' छवि में मेरे 'कोर i7-2600 3.4GHz/8 जीबी डीडीआर 3' पर लगभग 5 मिनट लगते हैं जिसके परिणामस्वरूप फ़ाइल का आकार 23 एमबीइट होता है। सभी छवि दर्शक इसे तेज़ और सही तरीके से संभाल नहीं सकते हैं (सही तनाव परीक्षण आईएमओ :)) – maverik
क्या हमें वास्तव में '-T
का उपयोग कर उत्पन्न करने के लिए निम्न आदेश का उपयोग करना ग्राफ छवि प्राप्त कर सकते हैं graph.png
$./gprof2dot.py --format=callgrind --output=out.dot /tmp/cachegrind.out.1360843301.16101
$dot -Tpng out.dot -o graph.png
कि ग्राफ में कमी है डेटा का उपयोग कर gprof2dot है callgrind.out शामिल थे? साथ ही, यदि आप "स्वयं" द्वारा क्रमबद्ध करते हैं, तो क्या संबंधित समय/निर्देश शेष हैं जो फ़ंक्शंस में सूचीबद्ध नहीं हैं? मुझे ऐसे मामले को याद नहीं किया जा सकता है जहां प्रासंगिक भागों को छोड़ दिया गया था। –
हां, callgrind.out में मुझे आवश्यक सभी डेटा शामिल हैं (ग्राफ़ में अनुपलब्ध फ़ंक्शंस सहित) और ग्राफ में सूचीबद्ध अधिकांश फ़ंक्शंस में प्रासंगिक समय/निर्देश व्यतीत किए गए हैं। पता नहीं क्यों 'KCacheGrind' इसका केवल एक हिस्सा खींचता है। यूपीडी: यदि मैं फ़ंक्शंस को चुनता हूं जो मैं फ़ंक्शंस की सूची में चाहता हूं (बाईं ओर स्थित 'KCacheGrind' लेआउट में बाईं ओर रखा गया है) तो ग्राफ़ को इस फ़ंक्शन को प्रदर्शित करने के लिए फिर से खींचा जाता है, लेकिन फिर भी दूसरों को याद आती है। मुझे एक बार में पूरे ग्राफ की जरूरत है। अग्रिम में धन्यवाद। – maverik