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