Отображение иерархии #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. Он может перечислить ваши зависимые включения и сделать больше вещей, таких как случайное удаление и компиляция, чтобы узнать, требуется ли это включение.