在 Visual Studio 中显示 C++ 文件的 #include 层次结构

问题描述 投票:0回答:10

问题: 我有一个大型 Visual C++ 项目,正在尝试将其迁移到 Visual Studio 2010。它是来自不同来源和不同时期的内容的巨大组合。我遇到问题,因为某些内容同时包含

winsock.h
winsock2.h

问题: 有哪些工具和技术可用于显示 Visual Studio C++ 源文件的

#include
层次结构?

我知道

cl /P
用于获取预处理器输出,但这并没有清楚地显示哪个文件包含哪些其他文件(在这种情况下,
/P
输出为 376,932 行长 8-)

在完美的世界中,我希望能够分层显示哪些文件包含哪些其他文件以及行号,以便我可以跳转到源代码:

source.cpp(1)
  windows.h(100)
    winsock.h
  some_other_thing.h(1234)
    winsock2.h
c++ visual-studio include
10个回答
288
投票

有一个设置:

项目设置 -> 配置属性 -> C/C++ -> 高级 -> 显示包含

这将生成树。它映射到编译器开关 /showInincludes


编辑(2024 年 1 月 9 日)

2022 17.9 将包含一个更有用的工具:“#include Diagnostics”;参见博客文章


25
投票

编译器还支持 /showIncludes 开关——它不会给你行号,但可以提供一个相当全面的视图,了解哪些包含来自哪里。

它位于“项目设置”->“配置属性”->“C/C++”->“高级”->“显示包含”下。


16
投票

我们发现IncludeManager是一个非常强大的工具。它不是免费的(但也不贵)已经开发完毕并且现在免费。它仅支持 Visual Studio 2005 至 2013。

它使我们能够控制我们的 Include 问题,并通过删除我们没有使用的大块包含来将编译时间从 50 分钟减少到 8 分钟。


7
投票

不如 gcc 的分层包含功能,该功能在出现错误时显示直接包含层次结构。 VS 中的“showincludes”选项显示了所有内容,这在调试分层包含文件问题时有点过分了。


5
投票

现在有一个 Visual Studio 插件,名为 IncludeToolbox。它可以列出您的依赖包含并执行更多操作,例如随机删除和编译以查看是否需要该包含。


3
投票

尝试使用 redhat Source-Navigator 以获得更多 图形化解决方案


3
投票

我使用 DoxygenGraphViz 作为类层次结构图形,并使用文本中的依赖树。

Doxygen:类层次结构

Doxygen 图:包括层次结构(类)

安装两者。确保选择 GraphViz 作为生成层次结构图的工具。选择“使用 GraphVix 包中的点工具”。

还要确保将 GraphViz 中的二进制目录包含到您的 PATH 环境变量中。


3
投票

IncludeFinder 是一个很好的第 3 方、FOSS 工具。您可以将结果导出到 XML,其中包括有关出现次数和行号的数据。


1
投票

cl /P 应该显示行号,这样您就可以知道头文件包含在哪里的上下文。

如果你用...来找出这些行

grep "^#line" 文件.i

...那么您应该可以清楚地了解预处理器按顺序遇到的文件。

如果这是一次性事件,这应该是一个非常快速的诊断。


0
投票

只需在 JetBrains Rider 中按

Alt-Shift-H
,即可获得交互式包含层次结构

© www.soinside.com 2019 - 2024. All rights reserved.