2012-03-09 14 views
15

ऐसी (चीज) उपकरण जैसी चीज है जो किसी दिए गए फ़ंक्शन में सभी फ़ंक्शंस कॉल का ग्राफ प्रदर्शित करेगी? उदाहरण के लिए, यदि मैं इसे जटिल फ़ंक्शन मज़े पर उपयोग करता हूं() मैं समझने की कोशिश कर रहा हूं, तो यह मुझे मजेदार() द्वारा बुलाए गए सभी कार्यों को दिखाएगा, फिर मुझे एक ही चीज़ को देखने की संभावना होगी मज़ा(), और इसी तरह से बुलाया समारोह। मैं इसे सी ++ कोड के लिए देख रहा हूं। क्या ऐसी चीज भी मौजूद है?सी ++ कोड निर्भरता/कॉल-ग्राफ "दर्शक"?

संपादित करें: मैं 2008 वी.एस. उपयोग कर रहा हूँ कि अगर मदद करता है, लेकिन मैं सोच रहा था कि इस तरह के एक सॉफ्टवेयर स्रोत फ़ाइलों पर वैसे भी काम करेगा

+0

किसी भी नॉनट्रिविअल प्रोग्राम के लिए, आउटपुट को अनावश्यक रूप से अव्यवस्थित होना होगा ... हालांकि, बुद्धिमान ओमिशन हेरिस्टिक के साथ - काम कर सकता है। – leftaroundabout

+0

ठीक है, आपको बहुत बुद्धिमान हेरिस्टिक की आवश्यकता नहीं है। गहरे दो या तीन स्तरों पर एक कट ऑफ पर्याप्त होगा। आप स्पष्ट रूप से सब कुछ नीचे 'मुख्य' से नहीं दिखा सकते हैं। मुख्य समस्या जो मैं देखता हूं वह 'वर्चुअल' फ़ंक्शंस है, जहां वास्तविक कार्यान्वयन को रनटाइम पर निर्धारित किया जाता है। – MSalters

+0

संभावित डुप्लिकेट [कोड का एक चित्रमय फ़ंक्शन कॉल ग्राफ़ प्राप्त करने के लिए उपकरण] (http://stackoverflow.com/questions/517589/tools-to-get-a-pictorial-function-call-graph-of-code) – finnw

उत्तर

18

Doxygen ऐसा कर सकते हैं। CALL_GRAPH और HAVE_DOT टैग YES की तैयारी में हैं तो Doxygen हर वैश्विक समारोह या वर्ग विधि के लिए एक फोन निर्भरता ग्राफ उत्पन्न होगा

हैं: CALL_GRAPH विन्यास विकल्प देखें। ध्यान दें कि इस विकल्प को सक्षम करने से रन के समय में काफी वृद्धि होगी। तो ज्यादातर मामलों में केवल \ callgraph कमांड का उपयोग करके चयनित कार्यों के लिए कॉल ग्राफ़ सक्षम करना बेहतर होगा।

3

हाँ ऐसी बातें मौजूद हैं। Google के शीर्षक स्थिर कोड विश्लेषण के तहत। उदाहरण के लिए, Understand जैसे टूल हैं, और यह बेहद संभव है कि आपका कंपाइलर भी ऐसा कर सके जिसके लिए मैं आपको अपने दस्तावेज़ में संदर्भित करता हूं।

+1

(क्या कंपाइलर * आप * उपयोग कर रहे हैं?: - /) –

+1

मैं ज्यादातर इंटेल फोरट्रान कंपाइलर का उपयोग करता हूं लेकिन इंटेल सी/सी ++ कंपाइलर्स कॉल-ग्राफ़ भी बना सकते हैं। लेकिन ग्रेग द्वारा सुझाए गए डॉक्सिजन शायद एक बेहतर जवाब है। –

+0

डॉक्सिजन बेहतर जवाब कैसे हो सकता है, यदि ए) ओवरलोड या एकाधिक विरासत (क्या, डॉक्सिजन एक पूर्ण कोएनिग लुकअप करता है?) या कोई अप्रत्यक्ष फ़ंक्शन कॉल है? –

2

जी ++ और अधिकांश कंपाइलर जो भी आप चाहते हैं कर सकते हैं। इसे profiling कहा जाता है। oprofile भी है। एक प्रोफाइलर आपको एप्लिकेशन के कॉल ग्राफ़ after को निष्पादन देता है। कोड का अध्ययन करने के लिए यह बहुत उपयोगी है, जब आप ग्राफ को देखते हैं तो आप [डीबग] आउटपुट के माध्यम से भी जा सकते हैं। इसके विपरीत, एक कोड विश्लेषक, आपको सभी संभावित कॉल पथ देगा, हालांकि, आप आसानी से महत्वपूर्ण पथ नहीं देख पाएंगे।

+1

प्रोफाइलिंग! = स्टेटिक विश्लेषण –

+0

स्टेटिक विश्लेषण? – perreal

+2

लेकिन प्रोफाइलिंग केवल उन कॉल ग्राफ को दिखाएगी, जिन्हें वास्तव में निष्पादित किया जाता है, न कि "सभी संभव"। –

6

हां, ग्रहण सीडीटी Call Hierarchy व्यू बिल्कुल यह प्रदान करता है। इसके अलावा, इस दृश्य 2 विकल्प हैं:

  • दिखाएँ कॉलर्स
  • दिखाएँ Callees

आप एक दूसरे के बारे में पूछ रहे हैं, लेकिन मैं कोड विश्लेषण में पहले एक पसंद करते हैं रहा हूँ।

2

मुझे इस उपकरण के लिए विशेष रूप से desgined किसी भी उपकरण के बारे में पता नहीं है।

  • एक आईडीई का उपयोग करना (QtCreator नि: शुल्क है, विजुअल स्टूडियो एक्सप्रेस भी उपयोगी हो सकता है ग्रहण CDT)
  • (ctags) का उपयोग करना [http: // ctags हालांकि, वहाँ यह करने के कुछ तरीके हैं। sourceforge.net/] और एक सक्षम पाठ संपादक।
  • कॉलग्रिंड का उपयोग करना और यह कई विचार लाता है। लाभ: आपको उन कार्यों को देखना पड़ता है जिन्हें वास्तव में बुलाया जाता है। नुकसान: केवल यूनिक्स में चलता है, और आपको प्रोफाइल करना होगा।
  • Doxygen का उपयोग ... यह वास्तव में फैंसी है, क्योंकि यह आपके कोड का एक HTML "दृश्य" उत्पन्न करता है, बशर्ते कि आप सही विकल्प प्रदान करें।
3

आप कॉलग्रिंड का उपयोग कर सकते हैं, और यह GUI टूल kcachegrind है।

1

वीसी ++ 2008/2010 प्रोफाइलर दूसरों के बीच फ़ाइल * CallerCalleeSummary.csv उत्पन्न करता है, जिसमें यह जानकारी शामिल है। और यह आलेख का लिंक है कि नमूना कार्यक्रम के साथ इसका उपयोग कैसे किया जाए: Profiling of C++ Applications in Visual Studio

4

Intel(R) Single Event API निःशुल्क ओपन-सोर्स प्रोजेक्ट है जो कॉल-ग्राफ़ विज़ुअलाइज़ेशन के लिए ग्राफ़वीज़ का उपयोग करता है। मैन्युअल या कंपाइलर-स्वचालित उपकरण करने में थोड़ा श्रम लगता है, लेकिन आंकड़ों और कॉल-ग्राफ़ के बगल में आपको ओवरटाइम दृश्य भी मिलेंगे। Example of the image you can get

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