Отображение иерархии #include для файла C++ в Visual Studio

: у меня есть большой проект Visual C++, который я пытаюсь перенести в Visual Studio 2010. Это огромная смесь материалов из разных источников и разных возрастов. Я получаю проблемы, потому что что-то включает оба winsock.h и winsock2.h.

вопрос: какие инструменты и методы существуют для отображения #include иерархия для исходного файла Visual Studio C++?

Я знаю, о cl /P для получения вывод препроцессора, но это не ясно показывает, какой файл включает в себя какие другие файлы (и в этом случае /P выход 376,932 линии длиной 8 -)

в идеальном мире я хотел бы иерархическое отображение того, какие файлы включают в себя какие другие файлы, а также номера строк, чтобы я мог перейти в источники:

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

8 ответов


есть параметр:

Настройки Проекта - > Свойства Конфигурации - > C / C++ - > Дополнительно - > Показать Включает

Это создаст дерево. Он сопоставляется с коммутатором компилятора /showIncludes


компилятор также поддерживает переключатель / showIncludes - он не дает вам номера строк, но может дать довольно полное представление о том, что включает в себя откуда.

Он находится в разделе параметры проекта - > свойства конфигурации - > C / C++ - > дополнительно - > показать включает.


мы нашли IncludeManager быть очень мощным инструментом. Это не бесплатно (но не дорого), и это позволило нам получить представление о наших проблемах с включением и сократить время компиляции с 50 минут до 8 минут, вырезая большие куски включений, которые мы не использовали.


Не так хорошо, как иерархическая функция включения gcc, которая показывает иерархию включения прямой линии в случае ошибки. Опция "показать включает"в VS показывает все, что является излишним при отладке иерархических проблем с файлами.


здесь - хороший сторонний инструмент FOSS. Результаты можно экспортировать в XML, который будет содержать данные о количестве вхождений и номерах строк.



cl / P должен показать вам номера строк, чтобы вы могли сказать контекст, из которого включается файл заголовка.

Если вы grep из строк С...

файл grep "^#line".я!--2-->

... тогда вы должны иметь довольно четкое представление о том, какие файлы были обнаружены в порядке препроцессора.

Если это один случай, это должна быть довольно быстрая диагностика.


теперь есть плагин для Visual Studio под названием IncludeToolbox. Он может перечислить ваши зависимые включения и сделать больше вещей, таких как случайное удаление и компиляция, чтобы узнать, требуется ли это включение.