understand作为一款源码阅读工具,有几个很棒的功能,对于函数的层级调用关系展示的很清晰。
下面来进行详细的说明:
层级关系图:
如下代码示例:、
void root(void)
{
//平台初始化
Init_Flats();
//创建系统任务
ShowInitInfo("创建系统任务2...");
CreateSysTask2();
//加载主维护口
ShowInitInfo( "加载维护端口..." );
InitSysPort();
//初始化负控系统
ShowInitInfo("创建/扫描系统文件...");
if(!bInSafe)
InitFKSystem();
if(bInSafe)
{
Trace("安全模式");
}
ExInitShowInitInfo();
//退出ROOT任务
}
butterfly:
显示调用和被调用关系,如果存在。选定的实体用红色标识,如图:
Calls:
显示从此函数发出的整个呼叫链。 实体之间的每条线被读作“x调用y”。
可知,root函数中调用的如图所示的函数。
Called By:
显示谁直接调用了该函数。
Calls Relationship / Calledby Relationship:
显示两个函数之间的调用以及被调用关系。
Calls Relationship:
root 调用ShowInitInfo
Calledby Relationship:
ShowInitInfo 调用root:
Control Flow
函数实体的流程图:不完美,但很清晰。
Declaration:
显示函数实体的结构,包括:函数名,函数返回值、函数实体被调用函数、函数实体调用了的函数;
Declaration File
对选中函数的定义文件的描述,包括该文件包含的头文件、变量、文件包含的函数等
gdwLastSaveTime为文件定义的变量,
UML Sequence Diagram:
生成UML的时序图,具体的请另行查看,不做过多解释。
Cluster graphs:聚类图
包括:Cluster Call, Cluster Callby, Cluster Call Butterfly, Cluster Call Internal, and Cluster Control Flow等,与上述的其他图类似,但更全面,有大局观。这里不一一列举。
原文:https://blog.youkuaiyun.com/guozhongwei1/article/details/80282734