Visual Studio'da bir C ++ dosyası için #include hiyerarşisini görüntüleme


169

Sorun: Visual Studio 2010'a geçirmeye çalıştığım büyük bir Visual C ++ projem var. Bu, çeşitli kaynaklardan ve çeşitli yaşlardan çok büyük bir karışım. Sorunlar alıyorum çünkü hem winsock.hve hem de bir şey dahil winsock2.h.

Soru:#include Visual Studio C ++ kaynak dosyası hiyerarşisini görüntülemek için hangi araç ve teknikler var ?

cl /PÖnişlemci çıktısını almayı biliyorum , ancak bu hangi dosyanın hangi diğer dosyaları içerdiğini açıkça göstermiyor (ve bu durumda /Pçıktı 376.932 satır uzunluğunda 8-)

Mükemmel bir dünyada, hangi dosyaların hangi diğer dosyaları içerdiğini, satır numaralarıyla birlikte hiyerarşik bir görüntü istiyorum, böylece kaynaklara atlayabilirim:

source.cpp(1)
  windows.h(100)
    winsock.h
  some_other_thing.h(1234)
    winsock2.h

2
Bir GCC / Clang çözümü arayan kişiler için gcc -H -fsyntax-only ..., hiyerarşiyi çıktılamak üzere kullanın . Stackoverflow.com/a/18593344/427545
Lekensteyn

Yanıtlar:


234

Bir ayar var:

Proje Ayarları -> Yapılandırma Özellikleri -> C / C ++ -> Gelişmiş -> İçeriği Göster

ağacı üretecek. Derleyici anahtarıyla / show'la eşleşir


20
Not: hiyerarşi Çıktı penceresinde görülebilir.
CannibalSmith

3
Eğer herkes en ilgi: Eğer Clang seçseniz bile platformu araç seti eklerseniz, yine de "göstermek içeren" olabilir -HdeC/C++ -> Command Line - Additional Options
çalışması devam ediyor

3
Yine de derleme zamanı hatasıyla ilgili doğrudan içerme hiyerarşisini gösteren ve satır numaralarını görüntüleyen gcc'nin "Dahil" özelliği kadar iyi değil.
Paul

2
Visual Studio (program dosyaları (x86) altında herhangi bir şey) içerir şeritler hızlı bir regex yaptı. Çıktı pencerenizi Notepad ++ gibi bir uygulamaya kopyalayabilir ve yapıştırabilir ve ağacınızdan tüm 1>\s*Note: including file:\s*C:\\Program Files \(x86\).*(\r\n|\n|$)
VS'leri içermek

2
/ ShowIncludes tek bir kaynak dosya için değiştirilebilse de, / showIncludes proje düzeyinde ayarlanmadığı sürece bunun hiçbir etkisi olmayacağını unutmayın.
David Carr

20

Derleyici ayrıca bir / showIncludes anahtarını destekler - size satır numaraları vermez, ancak nereden geldiğini içeren oldukça kapsamlı bir görünüm verebilir.

Proje Ayarları -> Yapılandırma Özellikleri -> C / C ++ -> Gelişmiş -> İçeriği Göster altındadır.


+1 Çok teşekkürler! (Ama korkarım xtofl daha hızlı olduğu için Kabulü alır).
RichieHindle

17

IncludeManager'ı çok güçlü bir araç olarak bulduk . Ücretsiz değil (ama pahalı değil) ve Include sorunlarımızı kavramamıza ve kullanmadığımız büyük parçaları budayarak derleme süremizi 50 dakikadan 8 dakikaya düşürmemize izin verdi.


5
Yow! IncludeManager'ı rahatsız edici dosyada çalıştırdım ve beni yüksek sesle güldüren bir grafik üretti. Hesaplamalarıma göre her şeyi görmek için 400 "monitöre ihtiyacım olacak. Sanırım yardım etme gücünün ötesindeyiz. 8-)
RichieHindle

2
Güncelleme - IncludeManager ana şirketi ProFactor (www.profactor.co.uk) işten çıktı, ancak en son sürümlerini yukarıdaki web sitesinden ücretsiz olarak sunuyor. Aşağı tarafı ise sadece VS2005'ten VS2013'e kadar Visual Studio'nun tam sürümlerinde çalışıyor.
Dana

5

Bir hata durumunda doğrudan satır içerme hiyerarşisini gösteren gcc'nin hiyerarşik içerme özelliği kadar iyi değildir. VS'deki "şovları göster" seçeneği, hiyerarşik dosyalama hatalarını ayıklama sırasında aşırıya kaçan her şeyi gösterir.


Bunu mingw ile kullandığım 5 yıldan beri bekliyorum.
fantastory

2
Belki de nasıl kullanılacağı, belgelerin nerede olduğu hakkında bazı ayrıntılar ekleyin? Bu cevap şu anda fazla bir şey eklemiyor.
Sam Brightman

4

İşte iyi bir 3. taraf, FOSS aracı. Sonuçları, gerçekleşme sayısı ve satır numaraları hakkındaki verileri içerecek şekilde XML'ye aktarabilirsiniz.


4

Artık Visual Studio için IncludeToolbox adlı bir eklenti var . Bağımlı eklemelerinizi listeleyebilir ve rastgele bir kaldırma ve derleme gibi daha fazla şey yapabilir ve bu eklemenin gerekli olup olmadığını görmek için.



2

cl / P size satır numaralarını göstermelidir, böylece bir başlık dosyasının nereden dahil edildiğini açıklayabilirsiniz.

Çizgileri ...

grep "^ # line" file.i

... önişlemci tarafından hangi dosyaların karşılaşıldığına dair oldukça temiz bir göstergeye sahip olmalısınız.

Bir kerelik bir olay ise, bu oldukça hızlı bir teşhis olmalıdır.


2
Tabii, ama bu bana sekiz bin satır yapılandırılmamış çıktı veriyor, hiyerarşi yok.
RichieHindle

Cl / P çıktısını yeterince uzun zamandır araştırıyordum ve iş için daha iyi bir araç olup olmadığını merak ettim. Şimdi var olduğunu keşfettim, bu harika. Soru olan genel ve diğerleri bulmak için yanıtlar sonsuza kadar burada SO olacak.
RichieHindle

0

Kullandığım Doxygen ve Graphviz .

resim açıklamasını buraya girin

Her ikisini de takın. Hiyerarşi diyagramlarını oluşturmak için araç olarak GraphViz'i seçtiğinizden emin olun. "GraphVix paketinden nokta aracını kullan" ı seçin.

Ayrıca GraphViz'deki ikili dizini PATH ortam değişkeninize eklediğinizden emin olun.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.