当前位置:主页   - 电脑 - 程序设计 - C/C++
C/C++源代码的Include依赖关系图
来源:网络   作者:微软   更新时间:2011-04-07
收藏此页】    【字号    】    【打印】    【关闭

  近期针对Visual Studio 2010的Visualization and Modeling Feature Pack已经在MSDN上发布下载了。这个Feature Pack是对Visual Studio Ultimate 2010的扩展,对于C/C++增加了更多的支持,比如C/C++代码的Include依赖关系图,层验证等等。因为该产品目前仅有英文版本,我们负责 Visual Studio中对于C++应用程序的生命周期管理的团队正通过Application Lifecycle Management for C++中文博客向大家介绍这个产品的方方面面。在此转贴其中一篇介绍如何使用Feature Pack来针对C/C++代码产生Include依赖关系图,也希望大家能经常关注这个技术博客(http://blogs.msdn.com/b/almcppcn/),大家的意见和建议会是我们坚持这些博文的最大动力。

  前一篇博文中我曾仔细介绍过如何查看C/C++代码的依赖项关系图,在这篇文章中我将会介绍如何使用Visualization and Modeling Feature Pack 工具包,查看C/C++源代码的Include关系图,这个功能是针对C/C++编程语言本身的特性而新加入的。在这里我依然会使用工程Hilo 作为案例,展示如何以图形化的方式显示工程中源代码文件与头文件之间Include关系。

  首先,在Visual Studio下打开工程Hilo,在菜单栏中选择菜单“体系结构->生成依赖关系图->By Include File”

C/C++源代码的Include依赖关系图

  第一次操作时,有时我们将会发现一个名为“Analyzing Files”的进度框会跳出,提示用户“代码正在解析中”,如图:

C/C++源代码的Include依赖关系图

  稍等片刻后,如下的DGML有向图将会生成,这张图除了展示工程Browser和Common内部源文件与头文件的Include关系外,还显示了工程之间,工程与外部头文件的Include引用关系。

C/C++源代码的Include依赖关系图

  下面我将会使用自顶向下的方式给您解释如何去阅读和分析这张图。点击该图右键菜单”分组->全部折叠”,我们将会得到下图:

C/C++源代码的Include依赖关系图

  这张图很清晰地告诉我们在当前解决方案中包含2个C++工程,分别是Browser和Common。Browser中包含61个源文件/头文件,而 Common中源文件/头文件的数量是29。工程Browser中的源文件Include了工程Common和”外部”中的头文件,而工程Common仅仅Include了“外部”中的头文件。这里的browser.vcxproj和common.vcxproj比较容易理解,分别包含了这两个工程中所有的源文件和头文件,而在”外部”这个结点中,则包括了所有被工程Browser和common所Include,但不属于这两个项目的头文件.让我们展开”外部”节点, 我们发现其中包含2个名为“Windows SDK”和”C/C++Standard Library”的子节点,如图:为了区分不同库的头文件,我们根据头文件所属领域的不同,我们将外部引用的头文件分为两类:“Windows SDK”和“C/C++ Standard Library”。节点“Windows SDK”下包含存储路径在“%WindowsSdkDir%\include”下的头文件,而节点“C/C++ Library”下的头文件的存储路径为“%VSINSTALLDIR%\vc\include”。在这里,工程Browser和Common Include的总共引用了“Window SDK”的13个头文件,工程Browser和Common,以及“Windows SDK”库引用了“C/C++ Standard Library”的 12个头文件。

  从上面的图中,我们可以了解到整个解决方案的Include依赖关系图的结构。然而,这个图中有如此多的节点,我们如何来查看我们想要了解的某一个或一些文件的Include依赖关系呢?首先,我们可以通过Ctrl+F来找到我们想要找到的文件。按下Ctrl+F,然后输入 “carouselpane.h”, Visual Studio将自动帮我们定位到所在的节点(如下图),同时与该链接相连的所有链接将会被高亮,链接箭头方向代表Include关系,如图:

C/C++源代码的Include依赖关系图

  源文件“carouselpane.cpp”include了头文件”carouselpane.h”,在图中将会有条始于节点 “carouselpane.cpp”,终于节点“carouselpane.h”的有向链接。停留鼠标在该链接上,显示“导向按钮”,点击“导向按钮” 中的“+”,我们将会被带到源代码文件”CarouselPane.cpp”

C/C++源代码的Include依赖关系图

  在源代码文件”carouselpane.cpp”中,代码行#include “CarouselPane.h”被自动选中,这个操作诠释了源文件“carouselpane.cpp”与“carouselpane.h”的 Include关系。点击右键菜单“查看内容”,头文件“carouselpane.h”将会被打开,

C/C++源代码的Include依赖关系图

  在打开的头文件“carouselPane.h”中,点击右键菜单“Generate Graph of Include Files”,一张关于头文件carouselPane.h Include”和Include By的依赖图将会产生,如下图:

C/C++源代码的Include依赖关系图

  该图所表达的语义是工程Browser下“Carouselpane.h”头文件被3个.cpp文件Include的,并且该文件Include了 8个.h文件。 这样,通过这样的子图,我们就能够比较方便地看到某个文件的Include和Include By依赖关系图了。

  总结:

  “Include” 依赖图提供了一种以图形化方式显示源文件与头文件间“Include”关系的方式,基于解决方案生成的“Include”图可以帮我们理解工程间以及工程与库头文件的“Include”关系,而基于单个文件的“Include”图可以帮我们进一步理解单个文件的“Include”和 “Include By”依赖关系。

其它资源
来源声明

版权与免责声明
1、本站所发布的文章仅供技术交流参考,本站不主张将其做为决策的依据,浏览者可自愿选择采信与否,本站不对因采信这些信息所产生的任何问题负责。
2、本站部分文章来源于网络,其版权为原权利人所有。由于来源之故,有的文章未能获得作者姓名,署“未知”或“佚名”。对于这些文章,有知悉作者姓名的请告知本站,以便及时署名。如果作者要求删除,我们将予以删除。除此之外本站不再承担其它责任。
3、本站部分文章来源于本站原创,本站拥有所有权利。
4、如对本站发布的信息有异议,请联系我们,经本站确认后,将在三个工作日内做出修改或删除处理。
请参阅权责声明