2013-05-06 6 views
8

से कंट्रोल फ्लो ग्राफ प्राप्त करना मैं ansi c अनुप्रयोगों का परीक्षण करने के लिए टूल बना रहा हूं। बस कोड लोड करें, नियंत्रण प्रवाह ग्राफ देखें, परीक्षण चलाएं, हिट किए गए सभी कशेरुकाओं को चिह्नित करें। मैं अपने आप को पार्सिंग कोड से सीएफजी बनाने की कोशिश कर रहा हूं। दुर्भाग्यवश अगर कोड घोंसला है तो यह गड़बड़ हो जाता है। जीसीसी संकलित कोड से सीएफजी प्राप्त करने की क्षमता देता है। मैं अपने आउटपुट के लिए पार्सर लिख सकता हूं, लेकिन मुझे ब्रेकपॉइंट्स सेट करने के लिए लाइन नंबर चाहिए। -fdump-tree-cfg या -fdump-tree-vcg के साथ नियंत्रण फ़्लो ग्राफ़ को आउटपुट करते समय लाइन नंबर प्राप्त करने का कोई तरीका है?एएनएसआई सी कोड

+0

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

उत्तर

6

इसलिए मैंने कुछ और शोध किया है और नोड्स के लिए लाइन नंबर प्राप्त करना मुश्किल नहीं है। इसे प्राप्त करने के लिए उन विकल्पों में से एक को lineno विकल्प जोड़ें। तो -fdump-tree-cfg-lineno या -fdump-tree-vcg-lineno का उपयोग करें। मुझे यह देखने के लिए कुछ समय लगा कि क्या वे संख्या विश्वसनीय हैं। में ग्राफ के मामले में वीसीजी प्रत्येक नोड के प्रारूप लेबल में दो संख्या शामिल हैं। वे इस नोड द्वारा प्रतिनिधित्व कोड भाग की शुरुआत और अंत के लिए रेखा संख्याएं हैं।

15

एक सी कार्यक्रम आप सी के लिए मौजूदा अजगर पारसर्स पर दिखाई दे सकते हैं नियंत्रण प्रवाह ग्राफ के लिए:

कॉल ग्राफ़ प्रवाह ग्राफ को नियंत्रित करने के लिए बारीकी से संबंधित निर्माण हैं। सी कोड के लिए कॉल ग्राफ़ (फ़ंक्शन निर्भरता) बनाने के लिए कई दृष्टिकोण उपलब्ध हैं। यह नियंत्रण प्रवाह ग्राफ उत्पादन के साथ प्रगति के लिए मदद साबित हो सकता है। तरीके सी में निर्भरता रेखांकन बनाने के लिए:

  • cflow का उपयोग करना:

    • cflow + pycflow2dot + dot (जीपीएल, बीएसडी) cflow, मजबूत है, क्योंकि यह कोड जो संकलन नहीं कर सकते हैं, उदाहरण के लिए संभाल कर सकते हैं गायब शामिल है। यदि प्रीप्रोसेसर निर्देशों का भारी उपयोग किया जाता है, तो कोड को प्रीप्रोसेस करने के लिए --cpp विकल्प की आवश्यकता हो सकती है।
    • cflow + cflow2dot + डॉट (ध्यान दें कि cflow2dot फिक्सिंग से पहले यह काम करता है कुछ पथ की जरूरत है)
    • cflow + cflow2dot.bash (GPL v2, (GPL v2, जीपीएल v3, पब्लिक लाइसेंस (ईपीएल) v1 ग्रहण)?)
    • cflow + cflow2vcg (GPL v2, GPL v2) की सूची के साथ
    • enhanced cflow (जीपीएल v2) ग्राफ
  • से प्रतीकों को बाहर करने के cscope का उपयोग करना:

    • cscope (BSD)
    • सीएससीओपी + callgraphviz + डॉट + xdot
    • सीएससीओपी + वीआईएम CCTree (सी कॉल पेड़ एक्सप्लोरर)
    • cscope + ccglue
    • cscope + सी, सी ++, अजगर के लिए CodeQuery & जावा
    • cscope + Python html producer
    • cscope + calltree.sh
  • ncc (चाहते cflow)

  • KCachegrind (केडीई निर्भरता दर्शक)
  • Calltree

निम्नलिखित उपकरण दुर्भाग्य से, यह आवश्यक है कि कोड compilable हो क्योंकि वे जीसीसी से उत्पादन पर निर्भर करते हैं:

  • CodeViz (GPL v2) (कमजोर बिंदु: क्योंकि यह का उपयोग करता है, compilable स्रोत की जरूरत है gcc cdepn फ़ाइलों को डंप करने के लिए)
  • gcc + egypt + डॉट (जीपीएल वी *, पर्ल = जीपीएल | कलात्मक लाइसेंस, ईपीएल v1) (egypt का उपयोग RTL का उत्पादन करने के लिए करता है, इसलिए किसी भी छोटी गाड़ी स्रोत कोड के लिए विफल रहता है, या यहां तक ​​कि यदि आप केवल एक बड़ी परियोजना से एक फ़ाइल पर ध्यान केंद्रित करना चाहते हैं। इसलिए, यह तुलना में बहुत उपयोगी नहीं है और अधिक मजबूत cflow आधारित toolchains। ध्यान दें कि मिस्र ग्राफ से पुस्तकालय कॉल को छोड़कर के लिए डिफ़ॉल्ट अच्छा समर्थन से है, बनाने के लिए यह क्लीनर।

इसके अलावा, C/C++ के लिए फ़ाइल निर्भरता रेखांकन crowfood के साथ बनाया जा सकता है।

+0

कॉल ग्राफ़ मुझे जो चाहिए वह नहीं है। मुझे कोड में शाखाओं को देखने की जरूरत है। मुझे उपयोगकर्ता को कोड में सभी लूप और निर्णय बिंदु दिखाना है। मैंने वीसीजी के लिए अपना खुद का पार्सर बनाया है, लेकिन मैं आपके द्वारा पोस्ट किए गए टूल की जांच करूंगा। – Eloar

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