メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

ランタイム エラーのある関数呼び出しの特定

このチュートリアルでは、関数本体でランタイム エラーの原因となる関数呼び出しを特定する方法を示します。

2 つの異なる呼び出しをされている同一の演算に対してそれぞれ 2 つの色が関数に含まれている場合、演算時に呼び出しコンテキストが結合されてオレンジ チェックが表示されます。たとえば、関数本体に演算に対するレッド チェックまたはオレンジ チェックの原因となる関数呼び出しとグリーン チェックの原因となる関数呼び出しがある場合、検証結果ではその演算がオレンジになります。

オレンジ チェックは他の原因から発生することがあるため、呼び出しコンテキストの結合によって発生したオレンジ チェックを区別しなければなりません。これを区別するには、オプション状況依存性を使用して関数の個々の呼び出しコンテキストを保存します。

このチュートリアルでは、関数が 2 回呼び出されます。関数本体で、どの関数呼び出しがランタイム エラーの原因となっているのかを特定します。

  1. このコードに対して解析を実行し、結果を開きます。

    void func(int arg) {
        int loc_var = 0;
        loc_var = 1/arg;  
    }
    
    void main(void) {
        int num = 1;
        func(num + 10);
        func(num - 1);
    }

    レッドの [無限呼び出し] チェックが func の 2 番目の呼び出しに対して表示されます。func の本体には、操作 / に対するオレンジの [ゼロ除算] チェックがあります。

  2. 関数 func に対する個々の呼び出しコンテキストの情報を保存するように指定します。

    1. プロジェクト構成で、[精度] ノードを選択します。

    2. [状況依存性][custom] を選択します。

    3. をクリックし、新しいフィールドを追加します。func と入力します。

  3. 検証を実行し、結果を開きます。

    func の本体には、オレンジの [ゼロ除算] チェックがまだ表示されます。ただし、[結果のリスト] ペインでは、このオレンジ チェックがダーク オレンジ チェックとしてマークされ、 マークで示されます。func の 2 番目の呼び出しには、レッドの [無限呼び出し] チェックではなく赤い破線が表示されます。

  4. オレンジ チェックを選択します。

    [結果の詳細] ペインに、チェックの呼び出しコンテキストが表示されます。1 つの呼び出しが演算 / でレッド チェックを生成し、もう 1 つの呼び出しがグリーン チェックを生成していることが確認できます。各呼び出しをクリックすると、ソース コード内の呼び出しに移動できます。

参考

トピック