メインコンテンツ

キャッチされていない例外チェックのレビューと修正

このトピックでは、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

イベント リストには、コード内の以下の点が示されます。

  1. 例外をスローするステートメント。

  2. 例外をスローする関数の戻り値。この場合は initialVector::getValue メソッド。

  3. 例外が伝播する次の関数の戻り値。この場合は getValueFromVector メソッド。

  4. main 関数。

このイベント リストを使用して、例外のエスケープ方法をトレースしたり、例外を処理するための try-catch ブロックを配置したりできます。たとえば、次の呼び出し

return vectorPtr->getValue(5)
try-catch ブロック内に配置できます。catch ブロックで、error 型の例外をキャッチできます。