想看一个函数调用了谁,可以从该函数生成Calls图;想看哪些函数调用了它,则查看Called By图。图中少了函数节点时,先别急着认定源码里没有这段调用。图形范围、隐藏设置,以及项目对代码的解析结果,都会影响最终显示。
一、Understand怎么生成代码调用关系图
先确定分析对象。以函数为起点,适合追踪一条调用链;以文件为起点,则适合查看文件内外的函数调用关系。
1、从函数生成调用图
①打开已完成分析的Understand项目,在源码中找到目标函数。
②右键点击函数名,依次选择【Graphical Views】→【Calls】,查看它直接或间接调用的函数。
③需要反向查找调用者时,再右键该函数,依次选择【Graphical Views】→【Called By】。
2、按文件查看调用关系
①在项目中找p到目标源文件,右键选择【Graphical Views】→【Calls&Called By】。
②在图形工具栏的【Variant】中选择【Calls】,查看向外发出的调用;需要同时观察调用者时,切换到【Butterfly】。
③如果选择了【Internal】,再与【Calls】视图对照,检查缺少的节点是否位于所选文件之外。Internal视图只显示当前范围内部的调用关系。
二、Understand调用关系图缺少函数节点如何检查
可以先搜索缺失的函数名。搜得到函数,却看不到图中的节点,优先检查图形设置;函数本身也搜不到,则应回到项目文件和解析配置。
1、检查调用方向和图形范围
①确认当前打开的是【Calls】、【Called By】还是【Calls&Called By】。
②在图形工具栏点击【Variant】,切换到【Simplified】,重新查看完整调用树。
③若先前使用【Internal】或【Relationship】,切换到覆盖范围更广的视图,再查找目标函数。
2、恢复被隐藏的节点
①在图形右侧的设置面板中查看【Visibility】,检查是否启用了隐藏节点的条件。
②点击【Show Hidden Nodes】恢复手动隐藏的节点;仍不确定设置来源时,点击【Restore Defaults】。
③检查调用层级设置,增加显示层数,再展开可继续查看的节点。图形的隐藏和层级选项都可能让后续函数暂时不出现在画面中。
3、确认函数所在文件已加入项目
①依次点击【Project】→【Configure Project】,进入源文件列表,查找缺失函数所在的文件。
②若文件不在列表中,在文件树中右键选择【Add File…】或【Add Directory…】,补入对应源码。
③检查所在目录的文件类型筛选与排除条件;补齐后点击【Project】→【Analyze All Files】,再重新打开调用图。
4、检查头文件和宏配置
①打开缺失函数的定义位置,查看相关代码是否被标记为未激活,以及函数名能否正确定位。
②依次点击【Project】→【Improve Project Accuracy】→【Missing Includes】,补充缺少的头文件目录。
③返回【Improve Project Accuracy】,打开【Undefined Macros】,按实际构建配置补充宏;随后点击【Project】→【Analyze All Files】。
5、检查分析结果是否过期
①修改源码或项目配置后,点击【Project】→【Analyze All Files】,等待分析结束。
②通过顶部搜索栏输入函数名,确认Understand已识别该函数及其定义位置。
③从调用它的函数重新打开【Calls】,查看节点是否出现;若仍缺失,继续核对项目使用的语言版本与构建配置。
三、怎样确认缺失的是节点还是调用关系
函数能被搜索到,只说明它已进入项目数据库;要确认调用关系,还需查看该函数的引用记录。复杂项目中,函数指针、虚函数和不同构建配置也值得单独核对。
1、用信息浏览器交叉检查
①右键点击发起调用的函数,选择【View Information】。
②在【Information Browser】中展开【Calls】,查找缺失的目标函数。
③若列表中存在该调用,返回图形检查范围和隐藏设置;若列表中也没有,打开对应源码,核对调用位置及解析状态。
2、检查间接调用
①在源码中确认该调用是否通过函数指针或虚函数发起。
②检查被调用函数及其赋值、重写所在的文件是否都已加入项目。
③重新分析项目,打开【Calls】图查看可能的调用目标;有多个运行时目标时,逐一核对图中的连接。
3、保存核对后的图形
①确认节点和调用方向后,在当前图形窗口点击【Export To File】。
②选择PNG或SVG格式,填写文件名并保存。
③打开导出的图,核对函数名称与连接关系,再用于文档或代码评审。
总结
调用关系图适合快速追踪代码,但它展示的是当前项目、当前解析配置下识别出的关系。图中少一个函数,可以先用搜索和信息浏览器确认函数与调用是否已被识别,再检查显示设置和源码范围;这样更容易找到真正需要调整的地方。希望这篇关于Understand生成调用关系图及检查缺失节点的介绍对大家有帮助。如有Understand相关需求,欢迎联系我们咨询。