2013-05-08 5 views
5

के अंदर फ़ाइल करने के लिए डंपिंग नियंत्रण प्रवाह ग्राफ मैं अपने पास में से एक में llvm में एक नियंत्रण प्रवाह ग्राफ आरेख बनाना चाहता हूं। मैं वर्तमान में CFGllvm डंपिंग नियंत्रण प्रवाह ग्राफ पास

block->getParent()->viewCFG(); //block is a basic block 

समस्या दिखाने के लिए निम्न का उपयोग करता है समस्या यह है कि यह एक खिड़कियां पॉप अप करता है। मैं बस एक विशेष फ़ाइल बिंदु पर सीएफजी को डॉट फ़ाइल (या यदि संभव हो तो jpg) के रूप में डंप करना चाहता हूं, खिड़की में दिखाई नहीं दे रहा हूं। मैं वही कैसे कर सकता हूं? मैं llvm 3.1 का उपयोग कर रहा हूँ।

नोट: मैं उस कार्यक्रम बिंदु से पहले, मेरे पास में सीएफजी संशोधित कर रहा हूं। इसलिए मैं opt -view-cfg का उपयोग नहीं कर सकता।

अद्यतन:

मिश्र के लिए धन्यवाद, मैं इस

WriteGraph(File, (const llvm::Function*) &fun, true, "test"); //I have also tired with false

CFG दिखाया गया है साथ ग्राफ को आकर्षित करने के लिए कर रहा था। लेकिन नोड खाली हैं। मैं नोड

उत्तर

3

की सामग्री कैसे दिखा सकता हूं, इसे देखें, viewCFG() फ़ंक्शन से पहले टिप्पणी पढ़ें।

http://llvm.org/docs/doxygen/html/CFGPrinter_8cpp_source.html

viewCFG() समारोह एक नई विंडो में CFG मुद्रण के लिए है। फ़ाइल में सीएफजी को डंप करने के लिए आपको CFGPrinter पास का उपयोग करना होगा जिसे dot-cfg हैंडल द्वारा बुलाया जा सकता है।

+0

उत्तर के लिए धन्यवाद। कृपया इसका उपयोग कैसे करें इसके बारे में एक संदर्भ दे सकते हैं। मुझे उस कक्षा में एक ही – simpleuser

+0

'CFGPrinter' करने के लिए एक फ़ंक्शन नहीं मिल रहा है, आप इसे' opt' के माध्यम से उपयोग कर सकते हैं। – shrm

+0

लेकिन मैं कैसे निर्दिष्ट करूं कि किस प्रोग्राम बिंदु पर ग्राफ को आकर्षित करना चाहिए? यह बहुत अच्छा होगा अगर आप कुछ नमूना उपयोग – simpleuser

1

आप जोड़ने की जरूरत में शामिल हैं: #include <llvm\Analysis\CFGPrinter.h>

यह getEdgeSourceLabel कार्यान्वयन जो अंदर सही नोड लेबल प्रदान करता है। एक ही समय में, सुनिश्चित करें कि आप <llvm\Support\CFG.h> फ़ाइल शामिल हैं क्योंकि यह डिफ़ॉल्ट रूप से खाली लेबल प्रदान करता है।

2

मुझे ssubbotin के उत्तर में कुछ जोड़ने दें। प्रश्न के बारे में

DOTGraphTraits<const Function*> 

CFGPrinter द्वारा प्रदान की है।

WriteGraph<const llvm::Function*>(...) 

यह काम कर रहे हैं:

मेरे मामले में मुझे लगता है कि जैसे कॉल का इस्तेमाल किया था।

समारोह टेम्पलेट परिभाषा निम्नलिखित की तरह है:

template<typename GraphType> 
raw_ostream &WriteGraph(raw_ostream &O, const GraphType &G, 
         bool ShortNames = false, 
         const Twine &Title = "") 

तो GraphType अंतर्निहित टेम्पलेट कॉल के साथ गैर स्थिरांक हो जाता है।

+1

देखें इसे प्रासंगिक उत्तर में टिप्पणी के रूप में जोड़ने के लिए सबसे अच्छा है, इसे स्वयं उत्तर दें। – SuperBiasedMan

+0

हाँ, दुर्भाग्य से मेरे पास इसके लिए पर्याप्त रैंक नहीं है: \ – wvoquine

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