QAC中文网站 > 热门推荐 > QAC函数调用图怎么查看 QAC函数调用图关系不完整怎么排查
QAC函数调用图怎么查看 QAC函数调用图关系不完整怎么排查
发布时间:2026/07/24 17:23:56

  在嵌入式软件或大型C、C++项目中,只看单个函数内部的诊断信息,往往难以判断某段代码会被哪些模块调用,也不容易发现递归调用、跨文件依赖和影响范围。QAC可以基于已完成的分析结果生成函数调用与关联信息。了解QAC函数调用图怎么查看QAC函数调用图关系不完整怎么排查,有助于从单个函数继续追踪到整个项目的调用链路。

  一、QAC函数调用图怎么查看

 

  QAC中的函数调用关系通常通过代码审查报告查看。报告可以展示函数、文件和类的指标,并提供调用、包含关系及函数结构等代码可视化内容。

 

  1、完成整个项目的文件分析

 

  生成调用关系前,需要保证项目中的源文件已经完成分析。

 

  ①启动QA·GUI。

 

  ②点击【Project】→【Open Project】。

 

  ③选择需要查看的QAC项目。

 

  ④确认项目出现在【Files】面板中。

 

  ⑤点击【Analyze】。

 

  ⑥选择【File-based Analysis of Project】。

 

  ⑦等待项目分析完成。

 

  ⑧检查文件旁边是否显示绿色完成标记。

 

  如果文件旁边出现时钟标记,说明源代码或项目配置发生了变化,当前结果已经过期。此时应重新执行分析,再生成调用图。

 

  2、生成代码审查报告

 

  ①点击顶部【Report】菜单。

 

  ②选择【Generate Report for Project】。

 

  ③在【Report Generation】窗口中选择【CRR】。

 

  ④确认输出位置。

 

  ⑤保留【Open Report Location】。

 

  ⑥不要勾选【Ignore Dependencies】。

 

  ⑦点击【OK】开始生成报告。

 

  ⑧在自动打开的目录中打开代码审查报告。

 

  如果只想查看部分文件,也可以先在【Files】面板中选中文件,再进入【Report】→【Generate Report for Selected Files】。不过这种方式只覆盖当前选择范围,不适合检查完整项目调用链。

 

  3、查看函数调用关系

 

  打开代码审查报告后,进入函数或文件对应的详情页面,查找【Calls】【Relations】等内容。

 

  【Calls】主要用于查看当前函数调用了哪些函数,以及哪些函数与当前函数存在调用联系;【Relations】用于查看更广泛的代码关联;【Function Structure】展示的是函数内部控制流,两者不能混为一谈。

 

  查看时可以从入口函数开始,逐级展开被调用函数,再返回上一级核对调用者。对于同名函数,还要结合源文件、命名空间、类名和参数信息判断是否为目标函数。

 

  4、通过命令行生成报告

 

  需要在持续集成环境中生成报告时,可以在项目目录执行:

 

  qacli report-P.--type CRR

 

  报告默认生成在当前配置对应的报告目录中。多配置项目应增加配置参数,确保生成报告所使用的配置与QA·GUI中查看的配置一致。

 

  二、QAC函数调用图关系不完整怎么排查

 

  调用图缺少函数或调用边时,常见原因包括分析结果过期、只分析了局部文件、跨文件分析未执行、编译配置不完整,以及代码中存在无法静态确定的间接调用。

 

  1、检查是否生成了局部报告

 

  ①返回QA·GUI。

 

  ②查看生成报告时使用的菜单。

 

  ③确认选择的是【Generate Report for Project】。

 

  ④检查【Files】面板中是否只选中了少量文件。

 

  ⑤重新生成整个项目的【CRR】报告。

 

  通过【Generate Report for Selected Files】生成的报告,只能反映选定文件及可获取到的相关信息。被调用函数位于未选文件中时,关系可能无法完整呈现。

 

  2、重新执行完整分析

 

  ①点击【Analyze】→【Clean Project】。

 

  ②确认清理项目现有分析结果。

 

  ③再次进入【Analyze】。

 

  ④选择【File-based Analysis of Project】。

 

  ⑤等待所有文件重新分析完成。

 

  ⑥确认没有分析失败或过期标记。

 

  ⑦重新生成代码审查报告。

 

  清理操作会删除当前项目的分析结果,因此应在确认项目配置正确后执行。重新分析能够避免报告继续读取旧源码对应的调用关系。

  3、检查跨文件分析范围

 

  文件分析主要以翻译单元为基础。调用者和被调用者位于不同项目或不同模块时,仅完成单项目文件分析,可能无法建立完整的跨模块关系。

 

  ①打开项目的分析工具链配置。

 

  ②确认跨模块分析组件已经加入。

 

  ③检查相关项目是否已加入同一个CMA方案。

 

  ④先完成各项目的文件分析。

 

  ⑤运行CMA分析。

 

  ⑥生成报告时选择对应的CMA方案。

 

  ⑦重新查看跨模块调用关系。

 

  如果项目只启用了基础分析,或者分析时跳过了整体程序组件,跨翻译单元信息就可能缺失。命令行执行时,也要检查是否使用了跳过整体程序分析的参数。

 

  4、核对项目同步和编译配置

 

  ①点击【Project】→【Project Properties】。

 

  ②检查当前配置使用的CCT。

 

  ③核对预处理宏、头文件目录和编译器选项。

 

  ④确认条件编译分支与实际构建一致。

 

  ⑤重新同步项目文件。

 

  ⑥再次运行完整分析。

 

  宏定义不一致时,QAC看到的代码路径可能与真实构建不同。头文件缺失、类型声明解析失败或编译器兼容模板不匹配,也会导致部分函数定义和调用表达式无法正确关联。

 

  5、判断是否属于间接调用

 

  函数指针、回调函数、虚函数、多态调用和运行时注册机制,可能无法在静态分析阶段对应到单一目标函数。宏封装、汇编调用、外部库接口和动态加载代码也可能只显示调用位置,不显示完整目标关系。

 

  遇到这类情况,应同时查看函数指针的赋值位置、回调注册函数和可能的目标函数集合。不能因为调用图没有画出唯一连线,就直接判断代码中不存在调用。

 

  三、怎么确认函数调用关系已经恢复

 

  完成配置调整和重新分析后,需要用固定入口函数进行前后核对,确认报告范围、分析状态和调用节点都已更新。

 

  1、选择一个可验证的调用链

 

  在源码中选择一组关系明确的函数,例如入口函数调用业务函数,业务函数再调用底层接口。记录三个函数所在文件和实际调用顺序,作为验证样本。

 

  2、重新生成并核对报告

 

  ①确认所有相关文件显示分析完成。

 

  ②进入【Report】→【Generate Report for Project】。

 

  ③选择【CRR】并生成报告。

 

  ④打开入口函数的【Calls】信息。

 

  ⑤逐级检查业务函数和底层函数。

 

  ⑥反向检查被调用函数是否能关联到对应调用者。

 

  如果同一调用链在源码中存在,而报告仍然缺少中间节点,应继续检查条件编译、函数指针和跨模块分析配置。

 

  3、检查报告是否为草稿

 

  生成报告时勾选【Ignore Dependencies】,可以绕过依赖检查,但报告可能被标记为草稿,内容也可能不完整。正式核对调用关系时,应取消该选项,并处理所有过期或失败的分析结果后重新生成报告。

  总结

 

  QAC函数调用图的完整程度,取决于源码范围、分析状态、编译配置和跨模块分析是否保持一致。处理QAC函数调用图怎么查看QAC函数调用图关系不完整怎么排查时,应先通过代码审查报告确认调用关系,再从局部报告、过期结果、项目同步和间接调用等方向逐项排查。调用图恢复后,还要选择真实代码链路进行正向和反向验证,才能确认分析结果已经能够反映当前项目结构。如有相关使用需求,欢迎联系咨询。

135 2431 0251