Menampilkan #include hierarki untuk file C ++ di Visual Studio

169

Masalah: Saya punya proyek Visual C ++ besar yang saya coba migrasi ke Visual Studio 2010. Ini adalah campuran besar barang-barang dari berbagai sumber dan dari berbagai usia. Saya mendapatkan masalah karena sesuatu termasuk keduanya winsock.hdan winsock2.h.

Pertanyaan: Apa alat dan teknik yang ada untuk menampilkan #includehierarki untuk file sumber Visual Studio C ++?

Saya tahu tentang cl /Puntuk mendapatkan output preprocessor, tapi itu tidak jelas menunjukkan file mana termasuk file lain (dan dalam hal ini /Poutputnya adalah 376.932 baris panjang 8-)

Di dunia yang sempurna, saya ingin tampilan hierarkis file mana yang termasuk file lain, bersama dengan nomor baris sehingga saya dapat melompat ke sumber:

source.cpp(1)
  windows.h(100)
    winsock.h
  some_other_thing.h(1234)
    winsock2.h
RichieHindle
sumber
2
Untuk orang yang mencari solusi GCC / Dentang, gunakan gcc -H -fsyntax-only ...untuk menampilkan hierarki. Kredit untuk stackoverflow.com/a/18593344/427545
Lekensteyn

Jawaban:

234

Ada pengaturan:

Pengaturan Proyek -> Properti Konfigurasi -> C / C ++ -> Lanjutan -> Tampilkan Termasuk

yang akan menghasilkan pohon. Ini peta ke saklar kompiler / showIncludes

xtofl
sumber
20
Catatan: hierarki dapat dilihat di jendela Output.
CannibalSmith
3
Jika siapa pun tertarik: bahkan jika Anda memilih dentang platform yang toolset , Anda masih bisa "show termasuk" jika Anda menambahkan -HdiC/C++ -> Command Line - Additional Options
WIP
3
Masih tidak sebagus fitur "termasuk dari" gcc, yang menunjukkan hierarki sertakan langsung yang terkait dengan kesalahan waktu kompilasi, dan yang juga menampilkan nomor baris.
Paul
2
Saya membuat regex cepat yang menghapus Visual Studio termasuk (apa pun di bawah Program Files (x86)). Anda dapat menyalin + menempelkan jendela keluaran Anda ke aplikasi seperti Notepad ++ dan melakukan pencarian regex dan ganti dengan kosong untuk menghapus semua VS termasuk dari pohon Anda:1>\s*Note: including file:\s*C:\\Program Files \(x86\).*(\r\n|\n|$)
kjhf
2
Perhatikan bahwa sementara / showIncludes dapat diaktifkan untuk file sumber individual, itu tidak akan berpengaruh kecuali / showIncludes diatur pada tingkat proyek.
David Carr
20

Kompiler juga mendukung switch / showIncludes - ia tidak memberi Anda nomor baris, tetapi dapat memberikan tampilan yang cukup komprehensif yang mencakup dari mana.

Itu di bawah Pengaturan Proyek -> Properti Konfigurasi -> C / C ++ -> Lanjutan -> Tampilkan Termasuk.

Kim Gräsman
sumber
+1 Banyak, terima kasih! (Tapi aku takut xtofl mendapat Terima karena lebih cepat).
RichieHindle
17

Kami telah menemukan IncludeManager sebagai alat yang sangat kuat. Ini tidak gratis (tapi tidak mahal) dan memungkinkan kami untuk memahami masalah Sertakan kami dan menghentikan waktu kompilasi kami dari 50 menit hingga 8 menit dengan memangkas potongan besar termasuk yang tidak kami gunakan.

Colin Desmond
sumber
5
Yow! Saya menjalankan IncludeManager pada file yang menyinggung, dan itu menghasilkan grafik yang membuat saya tertawa terbahak-bahak. Dengan perhitungan saya, saya akan membutuhkan monitor 400" untuk melihat seluruh hal yang saya pikir kita melampaui kekuatannya untuk membantu 8-)..
RichieHindle
2
Pembaruan - perusahaan induk IncludeManager, ProFactor (www.profactor.co.uk) telah gulung tikar, tetapi menyediakan rilis terbarunya secara gratis dari situs web di atas. Sisi buruknya adalah ia hanya bekerja pada versi lengkap Visual Studio dari VS2005 ke VS2013.
Dana
5

Tidak sebagus fitur sertakan hierarkis gcc, yang menunjukkan hierarki inklusi jalur langsung jika terjadi kesalahan. Opsi "tampilkan termasuk" di VS menunjukkan semuanya, yang berlebihan saat debugging hirarkis termasuk masalah file.

Paul
sumber
Saya menunggu ini dari 5 tahun sudah, yang saya gunakan dengan mingw.
fantastory
2
Mungkin menambahkan beberapa detail tentang bagaimana menggunakannya, di mana dokumentasinya dll? Jawaban ini tidak menambah banyak saat ini.
Sam Brightman
4

Ini adalah alat pihak ke-3 yang bagus, FOSS. Anda dapat mengekspor hasil ke XML, yang akan mencakup data tentang jumlah kemunculan dan nomor baris.

Daniel F. Thornton
sumber
4

Sekarang ada plugin untuk Visual Studio yang disebut IncludeToolbox . Itu dapat membuat daftar dependensi Anda dan melakukan lebih banyak hal seperti penghapusan dan kompilasi acak untuk melihat apakah menyertakan itu diperlukan.

Tuan Fox yang luar biasa
sumber
2

cl / P harus menunjukkan nomor baris, sehingga Anda dapat mengetahui konteks dari mana file header dimasukkan.

Jika Anda mencabut garis dengan ...

grep "^ # line" file.i

... maka Anda harus memiliki indikasi yang cukup bersih tentang file apa yang ditemui secara berurutan oleh preprocessor.

Jika ini insiden satu kali, ini harus menjadi diagnostik yang cukup cepat.

poliglot
sumber
2
Tentu, tapi itu memberi saya delapan ribu baris output tidak terstruktur, tanpa hierarki.
RichieHindle
Saya sudah cukup lama melihat-lihat output cl / P, dan bertanya-tanya apakah ada alat yang lebih baik untuk pekerjaan itu. Sekarang saya telah menemukan bahwa ada, yang sangat bagus. Pertanyaannya adalah umum, dan jawabannya akan berada di sini pada SO selamanya, untuk orang lain temukan.
RichieHindle
0

Saya menggunakan Doxygen dan GraphViz .

masukkan deskripsi gambar di sini

Pasang keduanya. Pastikan untuk memilih GraphViz sebagai alat untuk menghasilkan diagram hierarki. Pilih "Gunakan alat dot dari paket GraphVix".

Juga pastikan untuk memasukkan direktori biner dari GraphViz ke dalam variabel lingkungan PATH Anda.

Santiago Villafuerte
sumber