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

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

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

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

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

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

Ответ 1

Есть настройка:

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

это сгенерирует дерево. Он сопоставляется с переключателем компилятора /showIncludes

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

Ответ 7

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

Ответ 8

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

Если вы вычеркнете строки с помощью...

grep "^ # строка" file.i

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

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