Отображение иерархии #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
10 ответов
Есть настройка:
Настройки проекта -> Свойства конфигурации -> C/C++ -> Дополнительно -> Показать включает
это сгенерирует дерево. Он сопоставляется с переключателем компилятора /showIncludes
Компилятор также поддерживает ключ /showInclude - он не дает номеров строк, но может дать довольно полное представление о том, какие из них поступают откуда.
Он находится в разделе "Настройки проекта" -> "Свойства конфигурации" -> "C/C++" -> "Дополнительно" -> "Показать включает".
Мы обнаружили, что IncludeManager является очень мощным инструментом. Это не бесплатно (но не дорого), и это позволило нам получить представление о проблемах включения и сократить время компиляции с 50 до 8 минут, исключив большие фрагменты включений, которые мы не использовали.
Не так хорошо, как иерархическая функция включения gcc, которая показывает прямую иерархию включения в случае ошибки. Опция "show include" в VS показывает все, что является избыточным при отладке иерархических проблем с включаемыми файлами.
Теперь для Visual Studio существует плагин IncludeToolbox. Он может перечислить ваши зависимые включения и делать больше вещей, таких как случайное удаление и компиляция, чтобы увидеть, требуется ли это включение.
Вот хороший сторонний инструмент FOSS. Вы можете экспортировать результаты в XML, который будет включать данные о количестве вхождений и номерах строк.
Попробуйте redhat Source-Navigator для более графического решения.
cl /P должен показать вам номера строк, чтобы вы могли определить контекст, из которого включается заголовочный файл.
Если вы выделите строки с...
grep "^ # line" file.i
... тогда у вас должно быть достаточно четкое указание того, какие файлы были обнаружены в порядке препроцессором.
Если это случайный случай, это должно быть довольно быстрое диагностирование.