大型项目中,一个文件改动后会影响哪些模块,单靠搜索函数名很难判断。Understand可以从文件、类和架构层计算依赖,并下钻到具体调用、包含和使用关系。处理“Understand代码依赖关系怎么分析Understand循环依赖问题如何定位”时,应先保证工程分析完整,再从依赖图逐层缩小范围。
一、Understand代码依赖关系怎么分析
依赖图是否可信,取决于源码、宏定义和包含路径是否完整。存在大量未解析实体时,应先修正分析配置。
1、更新项目分析数据
①打开Understand工程。
②核对源码目录、排除目录和语言类型。
③检查编译参数、宏定义及头文件路径。
④执行完整分析。
⑤处理日志中的未解析文件和语法错误。
⑥确认主要函数和类型能够正常跳转。
Understand会把函数、类、文件和变量建立为实体,再按调用、包含、使用等引用汇总文件、类与架构依赖。
2、查看依赖方向
①在【项目浏览器】或【实体筛选器】选中文件、类或架构节点。
②右击选择【查看依赖关系】。
③选择【依赖于】,查看当前对象需要哪些对象。
④切换到【被依赖】,查看哪些对象会受其影响。
⑤展开右侧节点,继续查看文件和实体。
⑥双击引用记录,跳转到代码位置。
依赖浏览器左侧显示范围,右侧列出相关对象,还能切换引用来源和引用目标。文件依赖可能由包含、调用或数据访问共同形成。
3、生成多层依赖图
①在依赖浏览器中点击【图形】。
②选择文件、类或架构级视图。
③设置显示层级。
④隐藏无关的依赖类型。
⑤展开重点节点并观察箭头方向。
⑥导出图形或CSV保存结果。
依赖浏览器适合检查一层关系,图形视图能显示多层路径。C/C++项目还应区分编译时与链接时依赖。
二、Understand循环依赖问题如何定位
循环依赖是A依赖B,B又通过直接或间接路径回到A。图中出现双向箭头只是线索,还要找到形成闭环的实际代码引用。
1、从架构层查找闭环
①打开【架构浏览器】。
②选择目录结构或自定义架构。
③生成架构依赖图。
④查找双向连接或首尾相接的路径。
⑤选中异常连线并打开依赖浏览器。
⑥逐层展开到具体文件和实体。
Understand支持手工或自动建立架构。按业务层、服务层和基础层划分后,反向依赖更容易识别。
2、沿依赖边查看引用
①选中循环中的依赖边。
②查看产生该边的全部引用。
③按【Include】【Call】【Use】等类型筛选。
④双击记录跳到源码。
⑤分别记录A到B和B到A的形成位置。
⑥检查闭环是否经过第三个模块。
有些循环并非头文件互相包含,而是A调用B,B又访问A的类型或全局对象。列清每条边的引用,才能判断移除位置。
3、运行架构依赖检查
①配置各架构层允许的依赖方向。
②禁止底层模块反向依赖上层模块。
③保存并运行依赖检查。
④在【依赖违规】中选择问题。
⑤查看关系图中的高亮连线。
⑥跳转到建议处理的代码引用。
检查结果会联动显示违规列表、关系图和依赖浏览器,高亮连线可用于判断更适合切断的依赖位置。
三、循环依赖定位后怎么处理
找到闭环后,不要只靠调整包含顺序把编译错误压下去。真正要修的是职责划分和依赖方向。
1、按问题类型整改
头文件互相包含时,可提取公共类型并用前置声明减少包含;类互相调用时,可引入接口、回调或依赖注入;业务层与基础层反向耦合时,应把公共能力下沉到共享层。
①确认准备移除的依赖边。
②提取公共接口或数据结构。
③修改调用方向。
④重新编译并更新Understand分析。
⑤确认循环路径已经消失。
2、完成影响验证
①查看修改模块的【被依赖】关系。
②重新运行架构依赖检查。
③执行相关单元测试和集成测试。
④保存整改前后的依赖图。
⑤将允许的特殊依赖写入架构规则。
循环解除后还要防止依赖扩散。将架构检查纳入日常评审,能更早发现反向引用。
总结
“Understand代码依赖关系怎么分析Understand循环依赖问题如何定位”的重点,是先在架构层发现异常方向,再沿依赖边下钻到文件、类和具体引用。循环关系落实到实际调用或包含位置后,整改入口才会清楚。希望本文能为大家梳理代码结构和模块边界提供参考,如需进一步了解相关内容,欢迎联系咨询。