【摘要】
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源码中函数及数据结构的依赖关系图输出,对于深入研读源码帮助可能并不大。
加载中,请稍候......