Mostrar la jerarquía # include para un archivo C++ en Visual Studio


Problema: Tengo un gran proyecto de Visual C++ que estoy tratando de migrar a Visual Studio 2010. Es una gran mezcla de cosas de varias fuentes y de varias edades. Estoy teniendo problemas porque algo está incluyendo winsock.h y winsock2.h.

Pregunta: ¿Qué herramientas y técnicas existen para mostrar la jerarquía #include para un archivo fuente de Visual Studio C++?

Sé acerca de cl /P para obtener la salida del preprocesador, pero eso no claramente mostrar qué archivo incluye qué otros archivos (y en este caso el /P la salida es de 376.932 líneas de largo 8 -)

En un mundo perfecto me gustaría una visualización jerárquica de qué archivos incluyen qué otros archivos, junto con los números de línea para que pueda saltar a las fuentes:

source.cpp(1)
  windows.h(100)
    winsock.h
  some_other_thing.h(1234)
    winsock2.h
Author: Jonathan Leffler, 2009-07-16

8 answers

Hay un ajuste:

Configuración del proyecto - > Propiedades de configuración - > C / C++ - > Avanzado - > Mostrar Incluye

Que generará el árbol. Se asigna al conmutador del compilador /Showincluye

 199
Author: xtofl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-09 19:39:05

El compilador también soporta un interruptor /showIncludes't no te da números de línea, pero puede dar una vista bastante completa de qué incluye vienen de dónde.

Está en Configuración del proyecto -> Propiedades de configuración -> C/C++ -> Avanzado -> Mostrar Incluye.

 19
Author: Kim Gräsman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-16 14:37:07

Hemos encontrado que IncludeManager es una herramienta muy poderosa. No es gratis (pero no es caro) y nos permitió tener un control de nuestros problemas de inclusión y reducir nuestro tiempo de compilación de 50 minutos a 8 minutos mediante la eliminación de grandes trozos de incluye que no estábamos usando.

 17
Author: Colin Desmond,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-16 15:18:33

No es tan bueno como la característica de inclusión jerárquica de gcc, que muestra la jerarquía de inclusión de línea directa en caso de error. La opción" mostrar incluye " en VS muestra todo, lo cual es excesivo al depurar problemas de archivos de inclusión jerárquicos.

 6
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-05-19 07:50:03

Aquí es una buena herramienta de software libre de 3rd-party. Puede exportar los resultados a XML, que incluirá datos sobre el número de ocurrencias y números de línea.

 4
Author: Daniel F. Thornton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-16 14:28:00

Pruebe redhat Source-Navigatorpara una solución gráfica más .

 3
Author: Agnel Kurian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:26:14

Cl / P debería mostrarle los números de línea, de modo que pueda indicar el contexto de dónde se incluye un archivo de encabezado.

Si usted grep hacia fuera las líneas con ...

Archivo Grep "^ # line".i

... entonces debe tener una indicación bastante clara de qué archivos se encontraron en orden por el preprocesador.

Si se trata de un incidente aislado este debería ser un diagnóstico bastante rápido.

 2
Author: polyglot,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-16 14:28:52

Ahora hay un plugin para Visual Studio llamado IncludeToolbox. Puede enumerar sus inclusiones dependientes y hacer más cosas como una eliminación aleatoria y compilar para ver si esa inclusión era necesaria.

 1
Author: Fantastic Mr Fox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-15 10:49:13