Understand软件中文网站 > 热门推荐 > Understand如何追踪变量数据流 Understand变量引用路径不完整如何排查
教程中心分类
Understand如何追踪变量数据流 Understand变量引用路径不完整如何排查
发布时间:2026/10/31 15:11:18

  排查变量异常时,搜索变量名往往只能找到一部分线索。数据传入另一个函数后,参数名称变了;经过临时变量或对象成员转存后,原名称也不再出现。处理“Understand如何追踪变量数据流Understand变量引用路径不完整如何排查”,可以从具体变量实体出发,把读写位置、赋值关系和函数调用结合起来看,再检查路径中断的位置。以下配置排查以C/C++项目为例。

  一、Understand如何追踪变量数据流

 

  追踪前先确认选中的是哪个变量。同名局部变量、类成员和全局对象属于不同实体,选错起点,后面的引用列表也会跟着偏离。

 

  1、从变量定义确认查询对象

 

  ①在源码中选中变量,右键点击【View Information】,打开信息浏览器。

 

  ②核对定义文件、所在函数或类,以及变量类型,确认没有选中其他作用域中的同名对象。

 

  ③展开引用关系,点击具体记录跳转源码,区分赋初值、读取和修改的位置。

 

  信息浏览器也可通过【View】→【Information Browser】打开。查到一处使用后,应继续核对实际传递的对象,不能只比较名称。

 

  2、查看直接引用与数据流图

 

  ①右键变量,进入【Graphical Views】→【Object References】,查看直接设置、使用或修改该变量的函数。

 

  ②需要向来源追踪时,打开【Data Flow In】,沿设置或修改变量的函数继续查看相关对象。

 

  ③需要检查数据去向时,打开【Data Flow Out】,定位使用该对象值的后续关系。

 

  ④点击关键节点返回源码,核对赋值表达式、调用参数及分支条件。

 

  这些图依据静态分析关系生成。节点之间存在联系,并不表示它们在某次运行中一定按图上的排列顺序执行。

 

  3、沿赋值关系追踪名称变化

 

  ①返回【View Information】,展开【Assignments】和【Assigned To】,查看变量之间的赋值关系。

 

  ②遇到函数调用时,对照实参和形参,沿对应参数继续展开,检查数据进入函数后的使用位置。

 

  ③遇到临时变量或成员转存时,选中新对象,重新打开信息浏览器,继续检查。

 

  例如,调用方的buffer传入函数后成为data,继续搜索buffer会漏掉函数内部的处理;此时应沿参数对应关系查找。

 

  二、Understand变量引用路径不完整如何排查

 

  先判断缺失发生在哪一层:源码没有进入项目、解析未成功,还是图形只展示了部分关系。调整图形显示无法补回数据库中没有建立的引用。

 

  1、核对文件、头文件和宏配置

 

  ①进入【Project】→【Configure Project】→【Files】,检查相关实现文件、生成代码和目录是否已经加入,以及是否被排除。

 

  ②打开【Project】→【Improve Project Accuracy】→【Missing Includes】,补充实际构建使用的头文件搜索目录。

 

  ③通过【Undefined Macros】检查条件编译配置,对照目标构建设置宏及其值,不要为了显示所有分支而全部定义。

 

  ④完成配置后,执行【Project】→【Analyze All Files】,再查看分析错误与变量关系。

 

  文件有独立编译条件时,可在【Files】中右键选择【Configure override settings】设置覆盖项。头文件存在,也要确认搜索顺序没有选中另一版本的同名文件。

  2、检查解析模式和图形展示范围

 

  ①在【Project】→【Configure Project】的【C++】设置中核对解析模式。现代C++代码需要精确交叉引用时,应检查Strict模式及其所需构建信息。

 

  ②在【Violation Browser】中查看【Analysis Errors】,优先处理缺失头文件、未知类型等上游错误。

 

  ③打开图形工具栏的【Variant】,核对当前变体。例如【Relationship】只展示指定实体之间的关系,不能据此判断其他引用不存在。

 

  ④查看【Object References】的【With Called By】变体时,检查【Called By Depth】,适当增加调用者展开深度。

 

  源码或配置修改后,也要确认重新分析已经完成。普通引用图只显示直接引用时,没有继续展开调用者可能属于图形设计,并非漏分析。

 

  三、Understand如何核验路径中断的位置

 

  配置修正后仍有断点,可以选一条具体语句逐步检查。把不同类型的数据传递分开验证,更容易判断是查询方式问题还是分析能力边界。

 

  1、用直接赋值与复杂表达式对照

 

  ①选中直接赋值两侧的变量,分别打开【View Information】,检查【Assignments】和【Assigned To】。

 

  ②再选中包含计算的赋值结果,打开【Data Flow In】,结合源码查看参与计算的对象。

 

  ③记录没有形成预期连接的具体表达式,避免把赋值树中缺少一条边直接解释为没有数据依赖。

 

  SciTools对assign引用的说明指出,简单变量赋值及实参到形参的传递可建立此类关系;复杂表达式不能一概按同样方式理解,应结合当前版本结果核验。

 

  2、检查指针和间接调用两端

 

  ①在信息浏览器中打开参数与调用记录,核对传递的是数值、地址还是引用。

 

  ②从指针赋值、对象成员和被调用函数两端分别查询,确认中途是否换用了别名。

 

  ③遇到函数指针、回调或动态分派时,检查注册位置与可能的实现,再用【Graphical Views】查看相关函数关系。

 

  ④需要确认某次运行实际访问的对象时,结合调试器或测试记录验证,不把静态候选关系当作运行轨迹。

 

  3、保留可重复检查的分析条件

 

  ①记录源代码提交、Understand版本、缺失路径两端的实体和对应文件位置。

 

  ②在副本项目中保留相关文件及编译条件,执行【Analyze All Files】,复查同一变量。

 

  ③重新打开【Object References】和信息浏览器,对照缺失位置;若问题仍能复现,整理最小代码范围、配置及分析错误记录,便于继续定位。

  总结

 

  处理“Understand如何追踪变量数据流Understand变量引用路径不完整如何排查”,可用的分析结论应能说明数据经过哪些对象、关键连接对应哪条源码,以及哪些间接关系还需要运行验证。这些信息比单独保存一张大图更便于复查,也能让接手人员知道下一步该检查哪里。希望以上操作能帮助大家缩小变量异常的调查范围,减少因同名对象、构建条件或图形展示范围造成的误判。如有Understand相关需求,欢迎与我们交流咨询。

176 5129 0128