2009-07-16 10 views
127

Problema: Ho un progetto Visual C++ di grandi dimensioni che sto tentando di migrare a Visual Studio 2010. È un enorme mix di roba da varie fonti e di varie età. Sto avendo problemi perché qualcosa include sia winsock.h e winsock2.h.Visualizzazione della gerarchia #include per un file C++ in Visual Studio

Domanda: Quali strumenti e tecniche sono disponibili per visualizzare la gerarchia #include per un file di origine Visual Studio C++?

che so di cl /P per ottenere l'uscita del preprocessore, ma che non mostrano chiaramente quale file include quali altri file (e in questo caso l'uscita /P è lunga 376,932 linee 8-)

in un mondo perfetto mi piacerebbe una visualizzazione gerarchica dei quali file includono altri file quali, insieme con i numeri di riga in modo da poter saltare nelle fonti:

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

risposta

179

C'è un'impostazione:

Impostazioni progetto -> Proprietà di configurazione -> C/C++ -> Avanzate -> Mostra Include

che genererà l'albero. Si associa allo switch del compilatore /showIncludes

+0

Questo è proprio quello che stavo cercando (escludendo i numeri di riga, ma non puoi avere tutto). Stupido me, stavo guardando sotto le opzioni del Preprocessore. Cool Grazie! – RichieHindle

+0

Eccellente - mi era mancato. –

+14

Nota: la gerarchia può essere vista nella finestra Output. – CannibalSmith

4

Here è un buon 3 ° parte y, strumento FOSS. È possibile esportare i risultati in XML, che includerà i dati sul numero di occorrenze e numeri di riga.

+0

Dice che supporta VC7, supporta 2005/2008? Sembra un po 'stantio ... –

2

cl/P dovrebbe mostrare i numeri di riga, in modo da poter indicare il contesto da cui viene incluso un file di intestazione.

Se grep le linee con ...

grep "^ # line" file.i

... allora si dovrebbe avere un'indicazione abbastanza pulito di quello che sono stati incontrati i file in ordine dal preprocessore.

Se si tratta di un incidente occasionale, questa dovrebbe essere una diagnostica piuttosto rapida.

+2

Certo, ma questo mi dà ottomila righe di output non strutturato, senza gerarchia. – RichieHindle

+0

Guardavo attraverso l'output cl/P abbastanza a lungo e mi chiedevo se ci fosse uno strumento migliore per il lavoro. Ora ho scoperto che c'è, che è fantastico. La domanda * è * generale, e le risposte saranno qui su SO per sempre, per gli altri da trovare. – RichieHindle

15

Il compilatore supporta anche uno switch/showInclude: non fornisce i numeri di linea, ma può fornire una vista piuttosto completa di cui include provenienza da dove.

È in Impostazioni progetto -> Proprietà di configurazione -> C/C++ -> Avanzate -> Mostra include.

+0

+1 Molte grazie! (Ma temo che xtofl ottenga l'approvazione per essere più veloce). – RichieHindle

15

Abbiamo trovato IncludeManager uno strumento molto potente. Non è gratuito (ma non costoso) e ci ha permesso di prendere confidenza con i nostri problemi Includi e di ridurre i tempi di compilazione da 50 minuti a 8 minuti eliminando grossi pezzi di inclusioni che non stavamo utilizzando.

+4

Eeeek !!! Ho eseguito IncludeManager sul file incriminato e ha prodotto un grafico che mi ha fatto ridere ad alta voce. Secondo i miei calcoli avrei bisogno di un monitor da 400 "per vedere il tutto, penso che siamo al di là del suo potere di aiutare. 8-) – RichieHindle

5

Non valido come la funzione di inclusione gerarchica di gcc, che mostra la gerarchia di inclusione della linea diretta in caso di errore.L'opzione "mostra include" in VS mostra tutto, che è eccessivo quando il debug dei problemi di file include gerarchico.

+0

Aspetto per questo da 5 anni già, che ho usato con mingw. – fantastory

Problemi correlati