メインコンテンツ

Bug Finder チェッカーを使用した非推奨の関数または安全でない関数、キーワード、またはマクロのフラグ設定

このトピックでは、禁止されている関数、キーワード、またはマクロのカスタム リストを作成し、Polyspace® Bug Finder™ を使用してコード内でのそれらの項目の使用をチェックする方法について説明します。

チェッカーの拡張が必要かどうかの特定

チェッカーを作成または拡張する前に、既存のチェッカーが要件を満たしているかどうかを特定します。たとえば、これらのチェッカーは、次のような特定の関数の使用にフラグを設定します。

ただし、既存のチェッカーの対象とならない関数をブロックする必要がある場合があります。たとえば、std::signal などの信号処理関数の使用を禁止する場合です。

#include <csignal>
#include <iostream>

namespace
{
  volatile std::sig_atomic_t gSignalStatus;
}

void signal_handler(int signal)
{
  gSignalStatus = signal;
}

int main()
{
  // Install a signal handler
  std::signal(SIGINT, signal_handler);

  std::cout << "SignalValue: " << gSignalStatus << '\n';
  std::cout << "Sending signal " << SIGINT << '\n';
  std::raise(SIGINT);
  std::cout << "SignalValue: " << gSignalStatus << '\n';
}

同様に、既存のチェッカーにより禁止されていないキーワードをブロックする必要がある場合があります。

チェッカーの拡張

ブロックリストに登録する関数、キーワード、またはマクロが既存のチェッカーの対象ではない場合は、次の 1 つ以上のチェッカーを使用します。

チェッカー用のブロックリストを作成するには、次のようにします。

  1. 特定の構文で XML ファイル内の関数、キーワード、およびマクロを列挙します。

    テンプレート ファイル code-behavior-specifications-template.xml をフォルダー polyspaceroot\polyspace\verifier\cxx から書き込み可能な場所にコピーし、そのファイルを変更します。

    • 以下の構文を使用して、ファイル内の禁止されている各関数を既存の同様のエントリの後ろに入力します。

      <function name="funcname">
          <behavior name="FORBIDDEN_FUNC"/>
      </function>
      ここで、funcname は、ブロックリストに追加する関数の名前です。警告を回避するため、ファイル内の既存のエントリは削除してください。

    • 以下の構文を使用して、ファイル内の各キーワードを既存の同様のエントリの後ろに入力します。

      <token name="keywordname" kind="keyword">
            <behavior name="FORBIDDEN_KEYWORD"/>
      </token>
      ここで、keywordname は、ブロックするキーワードの名前です。

    • 以下の構文を使用して、ファイル内の各マクロを既存の同様のエントリの後ろに入力します。

      <token name="macroname" kind="macro">
            <behavior name="FORBIDDEN_MACRO"/>
      </token>
      ここで、macroname は、ブロックリストに追加するマクロの名前です。

    関数とキーワードには * ワイルドカードを使用できますが、マクロには使用できません。たとえば、名前に DEBUG を含むすべての関数を禁止するには、次のように入力できます。

    <function name="*DEBUG*">
          <behavior name="FORBIDDEN_FUNC"/>
    </function>
    マクロの指定で正規表現を使用するには、追加の属性 regextrue に設定します。たとえば DEFINED_ で始まるすべてのマクロを禁止するには、次のように入力します。
    <token name="DEFINED_.*" kind="macro" regex="true">
        <behavior name="FORBIDDEN_MACRO"/>
    </token>

  2. この XML ファイルをオプション [-code-behavior-specifications] の引数として指定します。

拡張可能なチェッカー

このような方法で以下のチェッカーを拡張できます。

参考

| | |

トピック