C/C++代码可视化

08/12/2010

5 分钟可看完

本文内容

今年4月发布的Visual Studio 2010 (以下简称VS2010)的旗舰版 提供了多种构架工具,来帮助开发人员分析和理解已有的代码库(Legacy Codebase),这些工具包括:依赖项关系图、顺序图以及体系结构资源管理器,Jennifer Marsman在她的博客中详细介绍了如何使用这些工具。然而在VS2010的正式发布版中,这些工具仅支持对.NET语言工程的支持,更确切地讲是仅支持C# 和VB.NET工程。对于广大的C/C++开发人员来说,他们也非常希望能够拥有类似的功能。为此,Visual Studio团队在今年6月份发布的Visualization and Modeling Feature Pack 工具包中,实现了对C/C++代码的可视化功能。

在安装了这个工具包后,就可以通过创建依赖项关系图(Dependency Graph)来了解和分析已有的C/C++代码工程了。这里我们以VS C++团队编写的Hilo工程 为例,来展示一下如何为C++ 工程创建依赖项关系图,Hilo的源代码可以在http://code.msdn.microsoft.com/Hilo下载到。

在VS中打开Hilo工程,选择菜单“体系结构”->“生成依赖项关系图”,如下图所示。在子菜单中,“按程序集”、“按名字空间”和“按类和自定义”是在VS 2010发布版中就有的,它们也可以用于C/C++的工程。这里新增加的一个菜单项是 “By Include File”,它是用来生成C/C++文件之间的#include引用关系的,会在另外的博客中进行介绍。注意:Visualization and Modeling Feature Pack仅提供了英文版,它可以安装在其它语言版本的VS 2010上,但显示的内容仍是英文的。

这里选择“按程序集”菜单项,它会生成如下的依赖项关系图(DGML有向图),显示Browser.exe与其它外部动态库文件之间的总体依赖关系:

进一步展开“外部”模块,可以看到Browser.exe依赖到了那些具体的动态库文件,如下图所示。当鼠标停留在模块之间的有向连线上的时候,会显示出“导向按钮”以及对连线所代表依赖关系的描述信息。

一步步展开到最底层,展现出来的就是函数之间的调用关系,如下图所示, Hilo::AnimationHelpers名字空间与Ole32.dll的以来关系归根结底就是 AnimationUtility::Initilize对CoCreateInstance的调用关系。鼠标双击图中的函数,如果有对应的代码则会自动打开代码文件,并自动定位到函数的位置,这样大大方便用户在浏览依赖关系模型时察看其对应的代码内容。

这个版本的Visualization and Modeling Feature Pack所生成的C/C++工程依赖项图,相对于为C#和VB.NET生成的依赖图,还是有一定的局限性:

首先,它只显示了函数调用类型的依赖关系,而并没用有像C#/VB.NET生成的依赖项关系图那样,还包含有引用、继承等等多种依赖关系;

其次,只显示了跨二进制文件(Cross-binary)之间的依赖关系,而没有同一文件内部(Intra-binary)函数之间的调用关系;

最后,只有参与了依赖关系的文件、名字空间、类和函数才被显在图上,而其它内容则没有显出来。这就解释了为什么在Ole32.dll中列出了4个函数,而其它的很多函数没有被列出,因为它们在当前的工程中没有被调用;

参考资源:

c语言函数可视化,C/C++代码可视化相关推荐

  1. R语言使用ggplot2包的快速可视化函数qplot绘制基础密度图实战

    R语言使用ggplot2包的快速可视化函数qplot绘制基础密度图实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制基础密度图实战 #仿真数据

  2. R语言使用ggplot2包的快速可视化函数qplot绘制分组点图(带状图)并配置分组颜色实战

    R语言使用ggplot2包的快速可视化函数qplot绘制分组点图(带状图)并配置分组颜色实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制分组点图(带状图)并配置分组颜色实战 #仿真 ...

  3. R语言使用ggplot2包的快速可视化函数qplot绘制分组箱图(jitter、分组颜色配置)实战

    R语言使用ggplot2包的快速可视化函数qplot绘制分组箱图(jitter.分组颜色配置)实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制分组箱图(jitter.分组颜色配置) ...

  4. R语言使用ggplot2包的快速可视化函数qplot绘制密度图(主题、轴标签设置)实战

    R语言使用ggplot2包的快速可视化函数qplot绘制密度图(主题.轴标签设置)实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制密度图(主题.轴标签设置)实战 #仿真数据

  5. R语言使用ggplot2包的快速可视化函数qplot绘制散点图实战

    R语言使用ggplot2包的快速可视化函数qplot绘制散点图实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制散点图实战 #仿真数据

  6. R语言使用ggplot2包的快速可视化函数qplot绘制基础直方图实战

    R语言使用ggplot2包的快速可视化函数qplot绘制基础直方图实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制基础直方图实战 #仿真数据

  7. R语言使用ggplot2包的快速可视化函数qplot绘制分组分组点图(带状图)实战

    R语言使用ggplot2包的快速可视化函数qplot绘制分组分组点图(带状图)实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制分组分组点图(带状图)实战 #仿真数据

  8. R语言使用ggplot2包的快速可视化函数qplot绘制散点图(设置每个数据点的文本标签信息)实战

    R语言使用ggplot2包的快速可视化函数qplot绘制散点图(设置每个数据点的文本标签信息)实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制散点图(设置每个数据点的文本标签信息) ...

  9. R语言使用ggplot2包的快速可视化函数qplot绘制散点图(添加平滑曲线与标准差带)实战

    R语言使用ggplot2包的快速可视化函数qplot绘制散点图(添加平滑曲线与标准差带)实战 目录 R语言使用ggplot2包的快速可视化函数qplot绘制散点图(添加平滑曲线与标准差带)实战 #仿真 ...

最新文章

  1. html页面创建二维数组,二维数组到HTML表?
  2. android从放弃到精通 第七天 tomorrow
  3. 基于RSSI利用KNN位置指纹法的室内定位(卡尔曼滤波)及代码
  4. elasticSearch6源码分析(2)模块化管理
  5. 实时监测tcp链接状态_终于搞懂了 TCP 的 11 种状态,太不容易了…
  6. 牛客网(剑指offer) 第七题 斐波那契数列
  7. Web前端开发笔记——第一章 Web前端概论
  8. linux java 进程内存_linux – 在java进程中消耗内存的是什么?
  9. java.lang.IllegalArgumentException: parameter must be a descendant of this view
  10. 5.网络层(3)---路由选择协议
  11. VTK(二)---相机外参矩阵Tcw转VTK相机,构建VR虚拟相机
  12. 安装好数据库 提示计算机无法启动,DBC数据库异常无法启动!!!HERODB配置错误怎么解决呢?...
  13. Python-银行卡号生成(符合校验规范)
  14. 翻译《Git版本控制管理》
  15. 如何看oracle 删除完全,怎么查看以前Oracle卸载干净没?
  16. 大厂面试 | 阿里巴巴大数据工程师面试题汇总
  17. 编程之美读书笔记_1.4 买书问题
  18. Java岗大厂面试百日冲刺 - 日积月累,每日三题【Day30】—— 设计模式1
  19. 1080P or 4K?——明基 TK800M 4K HDR家用投影体验
  20. 一次由于SQL Server BUG引起的数据库AlwaysOn主从切换故障分析处理

热门文章

  1. 神经网络反向传播为什么快
  2. php中li标签,li标签有哪些属性?css中li标签的属性详解
  3. GitHub好玩有趣的开源项目
  4. CCAI2017|智能金融论坛:听大佬们讲人工智能在金融领域的那些事儿
  5. Excel_VBA 设置单元格的字体属性(字体、字号、加粗、斜体、颜色等)
  6. 小蜜单车 免费骑车 BUG
  7. 新增表单元素属性事件
  8. 【HarmonyOS HiSpark IPC DIY Camera试用连载1】开箱组装初印象
  9. hbase+phoenix
  10. 单片机上拉电阻和下拉电阻