キャッチされていない例外チェックのレビューと修正
このトピックでは、Polyspace® Code Prover™ で [キャッチされていない例外] チェックの結果を体系的にレビューする方法を説明します。
[キャッチされていない例外] チェックの修正を判断するまでこれらの手順の 1 つ以上に従います。チェックおよびコードの例については、キャッチされていない例外を参照してください。
手順 1: チェック情報の解釈
[結果のリスト] ペインで、チェックを選択します。[結果の詳細] ペインで、チェックに関する詳細を確認します。
レッドまたはオレンジの [キャッチされていない例外] チェックのメッセージには、通常、以下のいずれかの理由が示されます。
| メッセージ | 意味 |
|---|---|
| Unhandled exception propagates to main or entry-point function. | 例外がスローされ、その例外が catch ブロックで処理されません。例外は main にエスケープします。 |
Call to typeName throws during "catch" parameter construction. | catch パラメーターの作成がコンストラクターを呼び出します。コンストラクターは例外をスローします。 |
| Throw during destructor or delete. | デストラクターが例外をスローします。 |
手順 2: チェックの根本原因の判定
最も一般的な根本原因は、例外が発生元から main 関数へと関数呼び出し階層の上の階層に伝播することです。
チェックに関連付けられたイベント トレースバックに、例外の発生元と、main 関数または別のエントリポイント関数への関数呼び出しツリーをさかのぼるパス 1 つが表示されます。各イベントをクリックすると、ソース コード内の対応する点に移動します。
この例では、main 関数から次の順序で呼び出されるメソッド initialVector::getValue で、例外がスローされます。
maingetValueFromVectorinitialVector::getValue

イベント リストには、コード内の以下の点が示されます。
例外をスローするステートメント。
例外をスローする関数の戻り値。この場合は
initialVector::getValueメソッド。例外が伝播する次の関数の戻り値。この場合は
getValueFromVectorメソッド。main関数。
このイベント リストを使用して、例外のエスケープ方法をトレースしたり、例外を処理するための try-catch ブロックを配置したりできます。たとえば、次の呼び出し
return vectorPtr->getValue(5)
try-catch ブロック内に配置できます。catch ブロックで、error 型の例外をキャッチできます。