メインコンテンツ

Code Prover のレッド チェックまたはオレンジ チェックの根本原因の特定

問題

検証後、操作がランタイム エラーの原因になるかどうかに応じて、コード内の操作が Polyspace® Code Prover™ によって特定の色で強調表示されます。Code Prover の結果とソース コードの色を参照してください。

検証によって特定の操作がレッド (確実にランタイム エラーになる) またはオレンジ (ランタイム エラーになる可能性がある) で強調表示される理由が、ここですぐに判明するわけではありません。エラーの原因が分かったとしても、その修正方法がすぐに判明するとは限りません。

考えられる原因: 前のコード操作との関係

特定の操作でのランタイム エラーは、コード内の前の操作に関連することがよくあります。

たとえば、演算のオペランド値が大きくなるとオーバーフローしますが、このオペランドは前の演算での値を引き継いでいます。

解決法

前の操作が現在の操作でのランタイム エラーのきっかけになっているかどうかを調べるには、次を行います。

  • 現在の操作の検証結果に関連付けられたメッセージを表示します。

    このメッセージは、[結果の詳細] ペインまたは [ソース] ペイン内でのその操作のツールヒントに表示されます。メッセージでは、結果をさらに詳しく調査する方法を示します。

    たとえば、以下のメッセージは、右側のオペランドがゼロになる可能性があることを示しています。どのようにすればオペランドの変数が値ゼロになるかを判断するには、これよりも前でこの変数に値を書き込んでいる操作を参照しなければなりません。

  • コード内で現在の操作によりも前にあり、現在の操作に関連する操作を参照します。

    Polyspace ユーザー インターフェイスには、コード内の特定の位置へ簡単にナビゲーションできる機能があります。たとえば、関数名から関数定義に移動できます。

コード内で解決策を実装するのに適した場所を特定します。

各チェック タイプの確認方法についての詳細は、Code Prover の実行時チェックのレビューを参照してください。

考えられる原因: ソフトウェアの仮定

完全なアプリケーションを用意していない場合、または検証に必要な外部情報を提供していない場合、本ソフトウェアでは不足しているコードや外部情報について一定の仮定を行わなければなりません。

たとえば、main 関数を用意していない場合、呼び出されない関数のみを呼び出す main が本ソフトウェアでは生成されます。func1func2 を呼び出す場合、生成した mainfunc2 を再度呼び出しません。検証では、func1 の呼び出しコンテキストからのみ、func2 のランタイム エラーがチェックされます。

この仮定は、大部分のアプリケーションに当てはまるように行われます。ただし、ごく少数の場合に、既定の仮定がランタイム環境を正確に表していない場合があります。仮定が想定と異なる場合、予期しない検証結果になる可能性があります。

解決法

本ソフトウェアの仮定に対する検証結果をトレースできるかどうかを確認します。仮定の部分的なリストについては、Code Prover 解析の前提条件を参照してください。その他の仮定の一覧は、polyspaceroot\polyspace\verifier\code_prover_desktopcodeprover_limitations.pdf で提供されています。

多くの場合、特定のオプションを使用して既定の仮定を変更できます。

それでも結果を理解できない場合、結果の解釈を添えて MathWorks® テクニカル サポートにお問い合わせください。実際の検証結果を共有できない場合は、その結果について不可欠な情報のみを提供してください。Polyspace 実行時の問題に関するテクニカル サポートへのお問い合わせを参照してください。