Problema: Eu tenho um grande projeto do Visual C ++ que estou tentando migrar para o Visual Studio 2010. É uma enorme mistura de coisas de várias fontes e de várias idades. Estou tendo problemas porque algo está incluindo ambos winsock.h
e winsock2.h
.
Pergunta: Quais ferramentas e técnicas existem para exibir a #include
hierarquia de um arquivo de origem do Visual Studio C ++?
Eu sei sobre cl /P
obter a saída do pré-processador, mas isso não mostra claramente qual arquivo inclui quais outros arquivos (e, neste caso, a /P
saída tem 376.932 linhas de comprimento 8)
Em um mundo perfeito, eu gostaria de uma exibição hierárquica de quais arquivos incluem quais outros, junto com os números das linhas, para que eu possa pular para as fontes:
source.cpp(1)
windows.h(100)
winsock.h
some_other_thing.h(1234)
winsock2.h
c++
visual-studio
include
RichieHindle
fonte
fonte
gcc -H -fsyntax-only ...
para gerar a hierarquia. Créditos para stackoverflow.com/a/18593344/427545Respostas:
Há uma configuração:
Configurações do projeto -> Propriedades de configuração -> C / C ++ -> Avançado -> Mostrar inclusões
isso irá gerar a árvore. Ele mapeia para o compilador switch / showIncludes
fonte
-H
emC/C++ -> Command Line - Additional Options
1>\s*Note: including file:\s*C:\\Program Files \(x86\).*(\r\n|\n|$)
O compilador também suporta uma opção / showIncludes - não fornece números de linha, mas pode fornecer uma visão bastante abrangente de quais são as informações de onde vem.
Está em Configurações do projeto -> Propriedades de configuração -> C / C ++ -> Avançado -> Mostrar inclusões.
fonte
Nós descobrimos que o IncludeManager é uma ferramenta muito poderosa. Não é gratuito (mas não é caro) e nos permitiu controlar nossos problemas de inclusão e reduzir o tempo de compilação de 50 minutos para 8 minutos, removendo grandes pedaços de inclusões que não estávamos usando.
fonte
Não é tão bom quanto o recurso de inclusão hierárquica do gcc, que mostra a hierarquia de inclusão de linha direta no caso de um erro. A opção "show includes" no VS mostra tudo, que é um exagero ao depurar problemas de arquivos de inclusão hierárquicos.
fonte
Aqui está uma boa ferramenta FOSS de terceiros. Você pode exportar resultados para XML, que incluirá dados sobre o número de ocorrências e números de linhas.
fonte
Agora existe um plug-in para o Visual Studio chamado IncludeToolbox . Ele pode listar suas inclusões dependentes e fazer mais coisas como uma remoção e compilação aleatória para verificar se essa inclusão foi necessária.
fonte
Tente redhat Source-Navigator para uma solução mais gráfica .
fonte
cl / P deve mostrar os números de linha, para que você possa informar o contexto de onde um arquivo de cabeçalho está sendo incluído.
Se você cumprimentar as linhas com ...
grep "^ # line" file.i
... então você deve ter uma indicação bastante clara de quais arquivos foram encontrados em ordem pelo pré-processador.
Se for um incidente pontual, esse deve ser um diagnóstico bastante rápido.
fonte
Eu uso Doxygen e GraphViz .
Instale ambos. Certifique-se de selecionar GraphViz como a ferramenta para gerar os diagramas de hierarquia. Selecione "Usar ferramenta de pontos no pacote GraphVix".
Certifique-se também de incluir o diretório binário do GraphViz na sua variável de ambiente PATH.
fonte