2013-05-08 20 views
5
benim geçişlerinin birinde LLVM bir kontrol akış diyagramı şeması inşa etmek isteyen

içinde dosyaya. Şu anda CFGLLVM damping kontrol akış diyagramı bir geçiş

Sorunları çözmek için aşağıdakileri kullanıyorum. Sadece belirli bir program noktasında cfg'yi bir nokta dosyasına (veya mümkünse jpg'ye) dökmek istiyorum, bir pencerede görünmemek. Aynı şeyi nasıl yapabilirim? Ben llvm 3.1 kullanıyorum.

NOT: Bu program noktasından önce geçişimde cfg'yi değiştiriyorum. Bu nedenle opt -view-cfg kullanamıyorum.

Güncelleme: Mishr için

sayesinde, CFG gösterilir bu

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

ile grafiğine çizmek başardı. Ama düğümler boş. Bu bir göz atın düğüm

cevap

3

içeriğini gösterebilir nasıl viewCFG() işlevi önce yorum okuyun.

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

viewCFG() fonksiyonu, yeni bir pencerede CFG baskı yapmaya yöneliktir. CFG'yi bir dosyaya dökmek için, dot-cfg tanıtıcısı tarafından çağrılan CFGPrinter geçişini kullanmanız gerekir. Sen eklemeniz gerekir

+0

Cevabınız için teşekkür ederiz. Nasıl kullanılacağı hakkında bir referans verebilir misiniz? Ben aynı sınıfta bir işlev bulamıyorum aynı – simpleuser

+0

'CFGPrinter' bir geçiş,' opt' aracılığıyla kullanabilirsiniz. – shrm

+0

Ancak grafiği çizmesi gereken program noktasını nasıl belirleyebilirim? Bazı örnek kullanımlara işaret ederseniz harika olurdu – simpleuser

1

şunlardır: #include <llvm\Analysis\CFGPrinter.h>

O hangi içeride doğru düğüm etiketleri sağlar getEdgeSourceLabel bir uygulama vardır. Aynı zamanda, emin olun size yapamaz varsayılan olarak boş etiketleri sağladığından <llvm\Support\CFG.h> dosya dahil var.

2

Ssubbotin'in yanıtına bir şeyler ekleyeyim. soru yaklaşık

DOTGraphTraits<const Function*> 

CFGPrinter tarafından sağlanmaktadır.

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

çalışması için:

Benim durumumda böyle çağrıyı kullanmak zorunda kaldı.

fonksiyon şablon tanımı aşağıdaki gibidir:

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

yüzden graphtype örtülü şablon çağrısı ile sigara const alır.

+1

Bunu kendi başına bir cevap haline getirmek yerine, ilgili cevaba bir yorum olarak eklemek en iyisidir. – SuperBiasedMan

+0

Evet, maalesef bunun için yeterince rütbem yok: – wvoquine