QAC中文网站 > 使用教程 > QAC如何查看单条告警的触发依据 QAC相同代码在不同文件中告警结果不一致是什么原因
教程中心分类
QAC如何查看单条告警的触发依据 QAC相同代码在不同文件中告警结果不一致是什么原因
发布时间:2026/10/28 16:50:00

  把一段代码从一个文件复制到另一个文件,QAC只在其中一处报出告警,乍看很难理解。点开消息后,才可能发现两处变量类型不同,或者某个宏改变了实际参与分析的代码。查看告警时,除了定位标记行,还需要阅读消息说明、关联位置及文件配置。下面以QAC独立图形界面为例,介绍这些入口的使用方法。

  一、QAC如何查看单条告警的触发依据

 

  先选中目标文件,再打开诊断结果。QAC的消息编号与编码规范的规则编号各有用途,两处都值得查看。

 

  1、定位消息并打开帮助

 

  ①在【Files】面板中单击目标文件,再打开底部【Analysis Results/Diagnostics】标签。

 

  ②找到告警,核对【ID】、【File】和行号,确认查看的是当前文件。

 

  ③双击消息文本或左侧颜色标记,在【Editor】中定位对应代码。

 

  ④点击【ID】中的消息编号,打开该诊断的消息帮助,阅读触发条件和示例。

 

  同一句消息可能出现在不同代码场景中。阅读帮助后,应回到当前表达式检查类型、取值范围或使用方式,不能直接照搬示例中的修改方法。

 

  2、查看规则映射和关联消息

 

  ①点击告警对应的规则链接,打开规则帮助,核对所采用标准的要求。

 

  ②如一条诊断对应多项规则,通过规则列的菜单逐项查看。

 

  ③对带有子消息的记录,点击子消息展开图标。

 

  ④双击展开的关联消息,查看声明、调用或其他相关代码位置。

 

  告警标记行有时只是发现问题的位置。比如类型不一致可能与前面的声明有关,重复定义也需要对照另一处定义。关联消息能帮助找到这些位置,但并非每条告警都有完整的数据流路径。

 

  3、将结果限定到同类告警

 

  规则较多时,可以先只看一个消息组,避免在整个文件的诊断中反复查找。

 

  ①打开【Rule Groups】,展开目标规范及规则分组。

 

  ②右键单击需要查看的规则或消息,选择【Show Only】。

 

  ③返回【Analysis Results/Diagnostics】,比较同类告警的代码上下文。

 

  ④检查结束后,在【Rule Groups】中右键选择【Reset Filter】,恢复显示范围。

 

  二、QAC相同代码在不同文件中告警结果不一致是什么原因

 

  先判断差异来自显示设置,还是分析输入。代码片段相同,并不意味着整个翻译单元、规则配置和分析结果都相同。

 

  1、检查告警是否被隐藏或抑制

 

  ①在【Files】中按住Ctrl,选中需要比较的两个文件。

 

  ②查看【Active】和【Total】数量,确认是否存在未计入活动告警的消息。

 

  ③在【Message Levels】或【Rule Groups】中右键选择【Reset Filter】。

 

  ④检查诊断面板的消息类别按钮和严重性筛选,恢复需要比较的显示范围。

 

  ⑤查看相关代码附近的抑制注释、pragma及基线设置,核对抑制范围。

 

  【Active】少于【Total】可能与抑制或基线有关。某文件没有显示活动告警,不等于分析器没有产生对应消息,比较时要使用一致的统计口径。

  2、对照宏定义和头文件路径

 

  ①在【Files】中单独选中第一个文件,展开底部摘要表。

 

  ②查看【Include Paths】和【Definitions】,记录路径顺序及宏定义。

 

  ③选择另一个文件,对照相同项目,并检查【Parent Attributes】中的继承配置。

 

  ④发现疑点时,点击对应字段旁的【Edit】查看完整内容,先核对再修改。

 

  例如,两个文件都包含同名头文件,但搜索路径不同,实际读入的类型声明可能并不相同。宏还可能让一处代码参与分析,另一处落入未启用的条件分支。

 

  3、生成预处理文件比较实际输入

 

  ①在【Files】中单独选中一个C或C++源文件,右键选择【Generate/Regenerate preprocessed.i】。

 

  ②生成完成后,右键点击【Open preprocessed.i】。

 

  ③对另一个文件重复操作,定位到相同代码附近。

 

  ④比较宏展开、条件编译结果、类型定义和函数声明。

 

  ⑤如仍存在解析疑点,可生成并打开.si文件,进一步检查分析相关信息。

 

  源码中写着相同的类型别名,展开后却可能分别指向不同整数类型。常量后缀、函数原型和包含顺序也会影响判断,因此预处理结果通常比单看复制的几行代码更有解释力。

 

  4、确认配置和结果没有过期

 

  ①查看【Files】中的状态图标;文件提示结果过期时,将鼠标停在图标上阅读原因。

 

  ②核对两次分析使用的QAC组件版本、语言设置、规则配置及编译器配置。

 

  ③选中两个文件,右键点击【Analyze Selected File(s)】,重新分析。

 

  ④若有解析错误,打开【Message Levels】,找到【Errors】并使用【Show Only】定位。

 

  ⑤对涉及跨文件关系的问题,再检查【CMA】结果及对应的跨模块分析设置。

 

  相同表达式所处的控制条件也可能不同。一处调用前已限制参数范围,另一处没有,这种上下文差异可能影响数据流诊断。只有统一配置、更新结果并排除解析错误后,才适合继续判断规则识别是否异常。

 

  三、QAC告警差异如何整理成可复核的记录

 

  两处代码都比较过,仍然无法解释时,可以缩小样例。保留触发差异所需的内容,后续更容易复现。

 

  1、逐项缩小差异范围

 

  ①复制工程作为排查副本,保留原始分析结果。

 

  ②围绕目标函数逐步减少无关代码,保留必要声明、头文件和宏。

 

  ③每次调整后使用【Analyze Selected File(s)】复查,记录告警何时出现或消失。

 

  ④保存消息编号、规则编号、配置版本及两份预处理结果。

 

  ⑤需要分享检查结果时,右键目标文件,选择【Generate Report For Selected File(s)】,并附上复现条件。

  总结

 

  QAC的消息帮助、规则映射和文件配置视图,为代码评审提供了不同角度的依据。一条消息背后可能涉及声明、宏展开或调用条件,查清这些内容,也有助于团队理解项目中的类型约定和编译环境。遇到两处结果不同时,留下可复现的样例,后续讨论就能围绕同一份输入展开,减少仅凭代码截图猜测的时间。希望本文能帮助大家找到告警的具体依据,让日常检查和问题交接更顺手。有相关需求,欢迎与我们交流。

读者也访问过这里:
176 5129 0128