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

问题: 我有一个大型的 Visual C + + 项目,我正试图迁移到 Visual Studio 2010。这是来自不同来源和不同时代的材料的巨大混合。我得到的问题,因为东西都包括 winsock.hwinsock2.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
79828 次浏览

这里 是一个很好的第三方,自由和开放源码软件工具。您可以将结果导出到 XML,其中将包括关于出现次数和行号的数据。

Cl/P 应该显示行号,这样就可以告诉您头文件是从哪里包含的。

如果你用..。

Grep“ ^ # line”文件

那么你应该可以清楚地知道预处理程序遇到了什么文件。

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

这里有一个设定:

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

它映射到编译器开关 /包括

编译器还支持/showinclude 开关——它不会给出行号,但是可以提供一个非常全面的视图,显示哪些包含从哪里来。

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

我们发现 包括经理是一个非常强大的工具。它不是免费的(但并不昂贵) ,它允许我们抓住我们的包含问题,并降低我们的编译时间从50分钟到8分钟,删除大块的包含,我们没有使用。

不如 gcc 的分层包含特性好,后者在出错时显示直线包含层次结构。VS 中的“ show include”选项显示所有内容,这在调试分层包含文件问题时是过度的。

现在有一个名为 包括工具箱的 VisualStudio 插件。它可以列出您的依赖包含,并做更多的事情,如随机删除和编译,以查看是否需要该包含。

对于类层次图形,我使用 氧气GraphViz,对于这些类,我使用文本中的依赖树。

类层次结构

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

enter image description here

两个都安装。确保选择 GraphViz 作为生成层次结构图的工具。选择“ Use dot tool from the GraphVix package”。

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