主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

要插桩的函数 (-functions-to-stub)

在分析期间指定要插桩的函数

描述

指定在分析期间要插桩的函数。

对于指定的函数,Polyspace®

  • 即使函数定义存在,也忽略该函数。

  • 假设函数的输入和输出具有其类型允许的全部值范围。

设置选项

使用以下方法之一设置选项:

  • Polyspace 用户界面(仅限桌面端产品):在工程配置中,选择输入和插桩节点,然后为该选项输入函数名称。

  • Polyspace 平台用户界面(仅限桌面端产品):在工程配置中,在静态分析选项卡上,选择输入和插桩节点,然后为该选项输入函数名称。

  • 命令行和选项文件:请使用 -functions-to-stub 选项。请参阅命令行信息

为何使用此选项

如果希望分析忽略函数体中的代码,可以对函数进行插桩。

例如:

  • 假设您尚未完成函数的编写,并且不想让分析考虑函数体。您可以使用此选项来对函数进行插桩,然后指定其返回值和可修改参量的约束。

  • 假设对函数体的分析不精确。分析假设函数返回函数返回类型允许的所有可能值。您可以使用此选项来对函数进行插桩,然后指定其返回值的约束。

设置

无默认值

输入函数名称或从列表中进行选择。

  • 点击 Add row to table icon. 可添加一个字段并输入函数名称。

  • 点击 Add function from a predefined list icon. 可列出代码中的函数。从列表中选择函数。

输入函数名时,请使用基本语法,或者为了区分重载函数,使用参量语法。对于参量语法,用分号分隔函数参量。请参阅以下代码和表格中的示例。

//simple function

void test(int a, int b);

//C++ template function

Template <class myType>
myType test(myType a, myType b);

//C++ class method

class A {
	public:
	int test(int var1, int var2);
};


//C++ template class method

template <class myType> class A
{
	public:
	myType test(myType var1, myType var2);
};

函数类型基本语法参量语法
简单函数testtest(int; int)
C++ 模板函数testtest(myType; myType)
C++ 类方法A::testA::test(int;int)
C++ 模板类方法A<myType>::testA<myType>::test(myType;myType)

提示

  • Code Prover 对插桩函数的参量和返回值进行假设。例如,Polyspace 假设插桩函数的返回值为全范围。这些假设可能会影响代码其他部分的检查。请参阅Code Prover Assumptions About Stubbed Functions (Polyspace Code Prover)

  • 如果对函数进行插桩,则可以限制函数参量和返回值的范围。要指定约束,请使用分析选项约束设置 (-data-range-specifications)

  • 使用此选项时,文件级代码复杂度度量(如行数和注释密度)可能会发生变化,因为一个或多个函数体不再被分析。

  • 对于 C 函数,允许使用以下特殊字符:( ) < > ; _

    对于 C++ 函数,允许使用以下特殊字符:( ) < > ; _ * & [ ]

    C++ 允许使用空格字符,但 C 函数不允许使用空格字符。

  • 您不能使用此选项来对以下 C++ 函数进行插桩:

    • constexpr 函数

    • catch 子句与整个函数体关联的函数尝试模块,例如:

      Class()
          try : Class( 0.0 ) //delegate constructor
          {
              // ...
          }
          catch (...)
          {
              // exception occurred on initialization
          }

    • 带参数包的模板函数,例如:

      template <class T, class... T2>
          X(T n, T n2, T2... rest): X(rest...) {
              v.insert(v.begin(), n);
              v.insert(v.begin(), n2);
          }

    • 返回类型为 auto 的函数,例如:

      template <typename F, typename... Args>
      inline decltype(auto) invoke(F&& func, Args&&... args)
      {
        return invoke_impl(eastl::forward<F>(func), eastl::forward<Args>(args)...);
      }

命令行信息

参数:-functions-to-stub
无默认值
值:function1[,function2[,...]]
示例 (Code Prover):polyspace-code-prover -sources file_name -functions-to-stub function_1,function_2
示例 (Code Prover Server):polyspace-code-prover-server -sources file_name -functions-to-stub function_1,function_2