看代码依赖时,最容易混淆的是“谁依赖了谁”。Understand会根据分析出的调用、引用等信息整理依赖,但文件、类和架构三个层级显示的内容并不完全相同。想把图看明白,先选对层级和方向;发现结果不准,再检查项目分析是否覆盖了相关源码。
一、Understand怎么查看代码依赖关系
查看单个文件,依赖浏览器能直接展开引用;想判断模块之间的联系,再看关系图和矩阵。这几种视图各有侧重,可以根据要查的问题切换。
1、从单个文件开始查看
①在项目文件树中右键点击目标文件,选择【View Dependencies】。
②点击【Depends On】,查看目标文件依赖的对象;点击【Depended On By】,查看依赖目标文件的对象。
③选中列表中的一条关系,展开右侧引用记录,查看对应的代码位置。
2、切换关系图和依赖矩阵
①右键点击目标文件,依次选择【Graphical Views】→【Depends On】,查看向外的依赖。
②需要看反向关系时,右键点击目标文件,依次选择【Graphical Views】→【Depended On By】。
③需要同时显示两个方向时,右键点击目标文件,选择【Graphical Views】→【Butterfly】。
④需要查看模块之间的关系时,点击【Project】→【Dependency Matrix】,选择目标架构,再点击矩阵中的对应单元格。
二、Understand代码依赖关系分析结果不准确如何处理
如果图里缺少预期的连线,不一定是代码没有被识别。例如一个文件调用了另一个文件中的函数,却在“被依赖”方向查找调用对象,就会觉得结果少了一项。方向和范围确认无误后,再检查文件列表、解析配置和分析状态。
1、排查方向和统计设置
①右键点击目标文件,选择【View Dependencies】,分别切换【Depends On】和【Depended On By】。
②点击【Project】→【Configure Project】,进入依赖设置,核对头文件引用和标准库对象的统计选项。
③重新选中同一文件,打开【View Dependencies】核对结果。
2、补齐项目中缺少的文件
①点击【Project】→【Configure Project】,打开项目的源文件列表。
②目标文件不在列表中时,右键点击文件树,选择【Add File…】;缺少整个目录时选择【Add Directory…】。
③目录加入项目后又新增了文件时,右键点击该目录,选择【Rescan Directory】。
3、调整C/C++解析配置
①依次点击【Project】→【Improve Project Accuracy】→【Missing Includes】,添加缺失的头文件目录。
②依次点击【Project】→【Improve Project Accuracy】→【Undefined Macros】,补上实际编译使用的宏。
③双击相关源文件,查看预期参与编译的代码是否仍显示为非活动代码。
4、刷新分析结果
①保存源码和配置,点击【Project】→【Analyze All Files】。
②分析完成后,右键点击原文件,重新选择【View Dependencies】。
③点击【Project】→【Dependency Matrix】,选择对应架构,核对模块之间的关系。
三、怎么确认依赖关系的实际来源
有时文件之间确实存在引用,但它并非正在寻找的那处调用。遇到这种情况,可以打开依赖背后的代码位置,再从关系的另一端核对。需要比较配置修改前后的变化时,也可以保存依赖列表。
1、追到产生依赖的代码行
①右键点击有疑问的文件,选择【View Dependencies】。
②在左侧点击目标依赖,在右侧展开引用列表。
③点击具体行号,打开对应源码并核对调用、类型使用或包含语句。
2、从依赖双方交叉核对
①右键点击文件A,选择【View Dependencies】→【Depends On】,查找文件B。
②右键点击文件B,选择【View Dependencies】→【Depended On By】,查找文件A。
③分别点开两侧的引用记录,对照文件名与代码行号。
3、导出结果留作比较
①依次点击【Project】→【Export Dependencies】→【File Dependencies】。
②选择【Export CSV】,设置文件保存位置并导出。
③修改项目配置并重新分析后,再导出一次,对照两份列表中的依赖项。
总结
代码依赖关系适合用来查找改动可能影响到哪里,也能帮助团队发现模块间意料之外的联系。读图时先确认分析层级和方向,再看对应的源码引用,讨论问题时就不必只凭图形猜测。项目更新后保留一份同范围的依赖记录,下次检查也有了参照。希望这些方法对大家使用Understand梳理代码结构有所帮助;如有Understand相关需求,欢迎联系我们咨询。