加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C 源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs

(2014-01-18 09:15:56)
标签:

源码

函数调用图

数据结构依赖图

gragh

分类: C

【摘要】
    1、本文主要讨论开源C源码中函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct Reference Graph)的获取或提取方法;不涉及任何C源码研究方法或阅读技巧,虽然这很重要,但笔者尚无此能力。http://www/uc/myshow/blog/misc/gif/E___7394ZH00SIGG.gif源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" TITLE="C 源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" />
    2、本文主要描述开源C源码中函数及数据结构的静态调用或依赖关系图的提取方法;有别于网络上的源码(程序文件.c/.cpp/.java)函数运行时函数调用序列图生成工具。
【工具】
    1、Source Insight 官网地址:http://sourceinsight.com/  源码预读工具
    2、NovaPDF or doPDF 官网地址:http://www.novapdf.com/dopdf.html 虚拟打印机
【方法概述】
    1、将C源码工程文件导入Source Insight (图略,详细可参考帮助文档或网络资料)
    2、单击[View]-->[Relation Window]弹出【关联窗口】
    http://s9/mw690/001XXEBXgy6FSDkG2eYb8&690源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" TITLE="C 源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" />

    弹出后将浮动的Relation Window拖拽在适当的位置停靠,笔者习惯停靠在右侧。

    http://s13/mw690/001XXEBXgy6FSDuiVOI9c&690源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" TITLE="C 源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" />
    3、双击要显示调用关系图的函数,显示调用关系图    http://s5/mw690/001XXEBXgy6FSDxRabG84&690源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" TITLE="C 源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" />
上图显示了shutdown_children调用了哪些函数,如果想显示更深一层的调用关系,比如图中kill_all_children的函数调用,可以单击kill_all_children函数,然后单击鼠标右键,调整显示关系,见下图。
http://s3/mw690/001XXEBXgy6FSDyBoIO52&690源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" TITLE="C 源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" />
    [提示]View  Relation子菜单中有多个有用选项,比如call-调用了哪些函数,Types Used-使用了哪些数据类型,Reference参考了哪些函数或数据等,Reference by系列则指该函数被哪些函数、模块、类、数据结构引用参考。下面我将要提到的[数据结构依赖图]笔者就是用Reference by Types一步一步实现的。下图是更深一层的函数调用关系图。
http://s2/mw690/001XXEBXgy6FSDyIeDDb1&690源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" TITLE="C 源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" />
  4、双击要显示依赖关系图的数据结构,按上面提到的方法层层显示。

http://s12/mw690/001XXEBXgy6FSEQZXfR1b&690源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" TITLE="C 源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" />
    5、调用图或依赖图保存

    如果想保存上面生成的调用图或依赖图,可以在Relation Window中单击鼠标右键,然后选择Print Relation Window,之后,选择[工具]提到的doPDF或novaPDF将调用图打印成PDF文档,如果想保存为其他图片,也可以选择图片虚拟打印工具,下图是效果图。(笔者尚未找到直接保存方法,有知道的,烦请告知)。

http://s7/mw690/001XXEBXgy6FSFEwMyq76&690源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" TITLE="C 源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" />

http://s6/mw690/001XXEBXgy6FSFEMD3f45&690源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" TITLE="C 源码阅读之函数(Function/Method)调用树图( Call Graph)及数据结构依赖图(Struct&nbs" />

[总结]

    本文只是用于C源码中函数及数据结构的依赖关系图输出,对于深入研读源码帮助可能并不大。



 

   
   


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有