2012-08-14 12 views
7

मैं मुख्य रूप से एक सी और सी ++ प्रोग्रामर हूं और मुझे अक्सर बहुत बड़े कोड बेस (जीसीसी, लिनक्स कर्नेल) की संरचना को तुरंत समझने की आवश्यकता होती है। मुझे आश्चर्य है कि इस संबंध में मदद करने के लिए कोई उपकरण हैं या नहीं। मुझे विशेष रूप से कॉल ग्राफ़, प्रोजेक्ट में डेटा संरचना संदर्भों में दिलचस्पी है, इसमें निर्भरता ग्राफ, त्वरित प्रतीक स्थान इत्यादि शामिल हैं। मुझे सीटीएजी और सीएससीओपी के बारे में पता है, लेकिन मैं कॉल ग्राफ जैसे अधिक विज़ुअलाइजेशन के साथ कुछ ढूंढ रहा हूं जो जल्दी से परिभाषा को पहचानने की अनुमति देता है एक फ़ंक्शन के, किसी विशेष कॉल पर आलेख को रूट करें, इसे परिवर्तित करें (यानी किसी दिए गए फ़ंक्शन पर सभी कॉल ढूंढना), आदिस्रोत कोड ब्राउज़िंग, समझ और पढ़ने के उपकरण

+0

आरटीसीएम - कंपाइलर मैनुअल पढ़ें। अधिकांश कंपाइलर जो कुछ आप चाहते हैं वह करते हैं और मैं उम्मीद करता हूं कि आपके द्वारा उपयोग किए जाने वाले कंपाइलर में कोई अपवाद नहीं है। –

उत्तर

0

कृपया SourceInsight का प्रयास करें और उपयोग करें। यह ब्राउज़िंग कोड और इसे समझने में काफी मददगार है। यह आपके द्वारा अनुरोधित अधिकांश सुविधाएं प्रदान करता है।

5

यदि आप कॉल ग्राफ़ बनाना चाहते हैं, तो आप जीसीसी के -finstrument-functions के साथ अपना खुद का रोल कर सकते हैं।

मूल रूप से, जब आप एक प्रोग्राम है जो विकल्प के साथ सक्षम संकलन, जीसीसी निम्नलिखित कार्य जब भी लक्ष्य कार्यक्रम में प्रवेश करती है या एक समारोह बाहर निकालता है कॉल:

 void __cyg_profile_func_enter (void *this_fn, 
            void *call_site); 
     void __cyg_profile_func_exit (void *this_fn, 
            void *call_site); 

क्या आप इन कार्यों को परिभाषित है, और लिखने की ज़रूरत कॉल ग्राफ़ का उत्पादन करने के लिए अपने तर्क में।

This extremely thorough tutorial बताता है कि आप -finstrument-functions और GraphViz का उपयोग करके कॉल ग्राफ़ कैसे बना सकते हैं। शामिल सभी उपकरण एफओएसएस और मुफ्त हैं।

बेशक

:

  1. रेखांकन Graphviz पैदा करता है एक IDE का हिस्सा स्टैंड-अलोन, और नहीं कर रहे हैं।
  2. मुझे वास्तव में यकीन नहीं है कि लिनक्स (कर्नेल) के कॉल-ग्राफ़ का उत्पादन इस प्रकार संभव है।
0

आप सीएफएलओ को आजमा सकते हैं। यह आपको अंदर के कार्यों की कॉल का एक ग्राफ प्रदान करता है। हालांकि यह बहुत लचीला नहीं है।

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