Polyspace支金宝app持编译器

作者:Anirban Gangopadhyay和Puneet Lal

一个经常出现的问题是:Polyspace®金宝app支持我正在使用的编译器?有时会有人问这个问题的另一种变体:为什么像Polyspace这样的静态分析工具需要了解编译器?这并不是说该工具编译代码、创建二进制文件并执行二进制文件来检测运行时错误。运行时错误检测根本不涉及执行代码。

简单的回答是:Polyspace不需要知道编译器。您可以提供源代码并开始分析,但是如果指定编译器,则设置Polyspace分析会更简单。

为了进一步理解这一点,让我们看看Polyspace如何分析您的代码。

编译在Polyspace

当您运行Polyspace时,分析的第一步是编译。在这一步中,Polyspace根据C或c++标准检查代码语法。有关详细信息,请参见用于多元空间分析的语言标准.如果文件包含语法错误的代码,则分析不能继续进行。分析就像编译器一样显示语法错误,并从考虑中删除该文件。

运行Polyspace分析。

编译器提供了标准中没有的额外语言扩展。例如,看到GCC扩展.如果Polyspace了解您的编译器,那么分析就可以识别这些特定于编译器的扩展。否则,语法检查将严格遵循标准,您必须手动为Polyspace定义这些扩展。

例如,GCC支持整数标量类型__金宝appint128对于可以容纳128位的目标。如果您使用默认编译选项,Polyspace Bug Finder™错误如下:
Const __int128 m = 3329589384618324948;

错误:
未定义标识符"__int128"

只要指定GCC编译器的新版本和一个可以包含128位的目标,就可以避免这个错误。

如果您已经使用构建命令(makefile)来构建源代码,那么设置就更容易了。您甚至不必显式地指定编译器。Polyspace可以跟踪构建命令并检测正在使用的编译器。不仅如此,Polyspace还检测编译器选项,并将它们合并到语法检查中。例如,如果您使用GCC选项std = c + + 14, Polyspace会检测这种用法,并根据带有GCC扩展的c++ 14标准检查代码。

在Polyspace中直接支持编译器金宝app

从R2019a开始,Polyspace直接支持以下编译器:金宝app

  • 海湾合作委员会
  • Visual c++®
  • 铿锵声
  • 凯尔
  • 迪亚布™(风河系统公司®
  • NXP™CodeWarrior®
  • 青山®
  • IAR嵌入式工作台
  • 任务®
  • 德州仪器™
  • 手臂®

有关受支持的编译器的完整列表,请参阅金宝appPolyspace文档

即使不直接支持编译器,您仍然可以使用Polyspace分析代码。金宝app如果您的代码被编写成可跨编译器移植的,那么来自编译器特定扩展的错误可能会更少。您可以使用Polyspace选项解决这些错误。例如,为了进行Polyspace分析(无需修改源代码),您可以将特定于编译器的数据类型替换为更容易识别的数据类型。

总之,Polyspace支持所有编译器。金宝app与其他编译器相比,有些编译器得到了更明确的支持。金宝app对于这些编译器,设置Polyspace分析只需要指定编译器名称。