解释Polyspace代码验证结果

当你打开a的结果时Polyspace®代码验证™分析后,你看到了一个列表结果列表窗格。该列表包括运行时检查、编码规则违反、代码度量和全局变量使用。

你可以先缩小回顾的范围:

  • 对结果列表列使用筛选器。例如,你可以专注于红色支票。

  • 根据文件和功能组织结果。使用列表上方的图标。

    因为代码验证程序运行时检查的结果依赖于以前检查的结果,所以从函数的开始到结束进行运行时检查是有帮助的。

另请参阅筛选和分组结果。一旦你缩小了列表的范围,你就可以开始查看各个结果了。本主题描述如何查看结果。

要开始检查,请在列表中选择一个结果。

解释结果

解释信息

第一步是了解问题所在。请阅读上面的信息结果细节上的相关代码行窗格。

此时,您可能已经准备好决定是否修复该问题。

该信息包括几个部分:

  • 检查颜色和图标:看代码验证结果和源代码颜色。如果检查运行时错误:

    • :红色表示一个明确的错误。

    • :橙色表示可能的错误。

    • :灰色表示不可到达的代码。

    • :绿色表示不能发生特定的错误。

  • 运行时检查的说明。

    在前面的示例中,检查确定数组索引是否超出数组边界。

  • 与运行时检查相关的值。

    在这个例子中,消息声明了数组大小(127)、数组边界(0..126)和数组索引变量在代码中可以取的值的范围(0..555)。

  • 不精确的相关来源(橙色方格)。

    在这个示例中,消息声明两个volatile变量可能负责检查。

参见源代码工具提示中的变量范围

带有工具提示的窗格、变量和操作加下划线。

在这个例子中,工具提示出现在:

  • s8_ret属性之前可以看到它的数据类型和值范围+操作。

    如果在+操作期间发生数据类型转换,您还可以在工具提示中看到这种转换。

  • +:您可以看到左右操作数的值和结果。

  • =:您可以看到在赋值和结果期间发生的任何数据类型转换。

获得额外的帮助

有时候,你需要额外的帮助才能得到某些结果。若要打开所选结果的帮助页,请单击图标。参见演示结果的代码示例。

找出结果的根本原因

有时,根本原因可能离显示结果的实际位置很远。例如,您读取的变量可能是未初始化的,因为初始化是不可到达的。当您读取变量时,缺陷会显示出来,但是根本原因可能是以前的如果条件总是假的。

在源代码中导航

有时候,结果细节窗格显示导致结果的事件序列。但是,在大多数情况下,您必须通过代码找到自己的导航路径。使用有关变量的工具提示,在浏览代码时跟踪变量范围的传播。

/* var的初始范围*/…var -= get ();/*新范围的var */…set(&var);/* var的新范围*/}

使用这些快速导航路径在用户界面:

  • 搜索对变量的所有引用并浏览它们。

    上的变量名窗格中,选择搜索所有引用。或者,双击变量。这些选项执行的不只是字符串匹配。这些选项只显示特定变量的实例,而不显示其他作用域中具有相同名称的其他变量。

  • 从函数调用导航到它的定义。

    方法上的函数名窗格。选择去定义

  • 从一个函数导航到它的调用者和被调用者。

    单击图标结果细节窗格。您将看到包含结果的函数及其调用者和被调用者。单击调用者或被调用者的名称以导航到调用站点。双击名称以导航到定义。

    或者,单击图标,以查看通向结果的调用序列的图形表示形式。要导航到此序列中的函数,请单击图中的节点。

  • 从函数调用或循环关键字导航到函数或循环体中的错误。

    如果错误只发生在特定的函数调用或特定的循环迭代中,则将函数调用或循环迭代高亮显示为红色。右键单击红色函数调用或循环关键字。选择去原因如果有选择的话。

  • 遍历全局变量的所有实例。

    单击图标结果细节窗格。查看结果中的所有全局变量并对它们进行读/写操作。

在开始浏览代码中的路径之前,确定要查找的内容并选择适当的导航工具。例如:

  • 调查一个Non-initialized变量检查,您可能想要确保变量根本没有初始化。查找该变量以前的实例,并查看它是否已初始化。

  • 调查违反MISRA C:2012规则17.7:

    具有非空返回类型应使用的函数返回的值。
    您可能希望从函数调用导航到函数定义。

有关查找内容的其他示例,请参见代码验证器运行时检查。从当前结果导航后,使用图标结果细节窗格返回该结果。

如果您单击包含结果的源代码令牌,则上一步的结果选择结果列表及有关结果细节窗格不更改。在源代码中导航时,可以将结果保存在结果列表中,并固定结果细节。有时,您可能希望看到与令牌关联的结果。更新结果选择和细节,Ctrl-单击令牌或右键单击并选择在此位置选择结果

在单独的窗口中导航

如果查看结果需要在源代码中进行更深入的导航,那么可以创建一个重复的源代码窗口,在原始源代码窗口中进行导航时,该窗口将重点放在结果上。

右击在窗格中,选择创建重复代码窗口。右击显示重复文件名的选项卡(以…结尾)产卵1),并选择新的垂直组

在重复文件窗口中执行导航步骤,而缺陷仍然出现在原始文件窗口中。调查完成后,关闭复制窗口。

相关的话题