**问题:**我有一个大型的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
9条答案
按热度按时间vvppvyoh1#
有一个设置:
项目设置-〉配置属性-〉C/C++ -〉高级-〉显示包含
它将生成树。它Map到编译器开关/showIncludes
ff29svar2#
编译器还支持/showIncludes开关--它不给予行号,但可以提供关于哪些include来自何处的相当全面的视图。
它位于“项目设置”-〉“配置属性”-〉“C/C++"-〉”高级“-〉”显示包含“下面。
r1zk6ea13#
我们发现IncludeManager是一个非常强大的工具,它不是免费的(但也不贵),现在已经免费了,它只支持Visual Studio 2005到2013。
它允许我们控制Include问题,并通过删除大量不使用的Include,将编译时间从50分钟减少到8分钟。
fnvucqvd4#
不如gcc的分层include特性,它在出错时显示直接的包含层次结构,VS中的“show includes”选项显示所有内容,这在调试分层include文件问题时显得有些多余。
sc4hvdpw5#
现在有一个名为IncludeToolbox的Visual Studio插件,它可以列出依赖的包含,并做更多的事情,如随机删除和编译,看看是否需要该包含。
gorkyyrv6#
尝试redhat Source-Navigator以获得更图形化的解决方案。
fjnneemd7#
我使用Doxygen和GraphViz表示类层次结构图形,并使用文本中的依赖关系树表示它们。
Doxygen: Class Hierarchy
Doxygen diagrams: include hierarchy (classes)
两者都安装。确保选择GraphViz作为生成层次结构图的工具。选择“使用GraphVix包中的点工具”。
还要确保将GraphViz中的二进制目录包含到PATH环境变量中。
nuypyhwy8#
IncludeFinder是一个很好的第三方FOSS工具,可以将结果导出到XML,其中包括出现次数和行号的数据。
n3schb8v9#
cl /P应该向您显示行号,这样您就可以知道头文件是从哪里包含进来的。
如果你用...
grep“^#行”文件.i
...那么你应该有一个相当清晰的指示,什么文件遇到的顺序由预处理器。
如果这是一个一次性事件,这应该是一个相当快的诊断。