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

问题:我有一个很大的Visual C ++项目,我试图迁移到Visual Studio 2010.这是来自不同来源和不同年龄的大量组合。 我遇到问题,因为包括winsock.hwinsock.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 

有一个设置:

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

那会生成树。 它映射到编译器开关/ showIncludes

编译器还支持/ showIncludes开关 – 它不会给你行号,但可以给出一个相当全面的视图,其中包括哪里来的。

它在项目设置 – >configuration属性 – > C / C ++ – >高级 – >显示包括。

我们发现IncludeManager是一个非常强大的工具。 它不是免费的(但并不昂贵),它使我们能够掌握我们的包含问题,并通过删除我们没有使用的大量包含来将我们的编译时间从50分钟缩短到8分钟。

不如gcc的分层包含function,在出现错误的情况下显示直接包含层次结构。 VS中的“show includes”选项显示了所有内容,这在debugging分层包含文件问题时是过度的。

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

cl / P应该显示你的行号,这样你就可以告诉上下文头文件被包含在哪里。

如果你用… grep出线

grep“^#line”file.i

…那么你应该有一个相当干净的指示,预处理器按顺序遇到了什么文件。

如果这是一次性的事件,这应该是一个相当快的诊断。

尝试使用redhat Source-Navigator来获得更加graphics化的解决scheme 。