AUTOSAR C++14 Rule A15-3-3
Main function and a task main function shall catch at least: base class exceptions from all third-party libraries used, std::exception and all otherwise unhandled exceptions
説明
ルール定義
Main function and a task main function shall catch at least: base class exceptions from all third-party libraries used, std::exception and all otherwise unhandled exceptions.
根拠
main() またはタスク main 関数の実行中は、複数の例外が発生する可能性があります。次に例を示します。
クラス
std::exceptionの明示的に発生した例外使用されているサードパーティ ライブラリから発生した例外
予期せぬ例外
これらの例外のいずれもハンドラーと一致しなかった場合は、コンパイラが関数 std::terminate() を暗黙的に呼び出して、プログラム実行を異常終了させます。使用しているハードウェアとソフトウェアによっては、この終了プロセスによって std::abort() が呼び出され、スタック内の変数を削除せずにプログラム実行が中止される場合があります。このような異常終了はメモリ リークやセキュリティの脆弱性につながります。
未処理例外は、プログラム実行の異常終了を引き起こし、メモリ リークやセキュリティの脆弱性につながる可能性があります。これらの問題を回避するには、main() またはタスク main 関数の処理を try-catch ブロック内で実行します。catch ブロックで以下を行います。
std::exception型の例外を該当する catch ブロックで明示的に処理する。サードパーティ ライブラリから発生する例外の基底クラスを処理する。
予期せぬ例外を
catch(...)ブロックで処理する。
Polyspace 実装
以下の場合に、Polyspace® は関数
main()またはタスク main 関数にフラグを設定します。関数内で未処理例外が発生した。たとえば、
try-catchブロックの外側または catch ブロック内で発生した例外は未処理のままの可能性があります。関数に
try-catchブロックが存在しない。関数に
std::exception型の例外を明示的に処理する catch ブロックが存在しない。関数に未処理例外を処理する catch-all ブロックまたは
catch(...)ブロックが存在しない。
Polyspace は、サードパーティ ライブラリからの例外が処理されるかどうかをチェックしません。
Polyspace は、未処理例外が発生しない可能性があっても、関数
main()またはタスク main 関数にフラグを設定します。
Polyspace は関数 main() を検出します。関数をタスク main 関数として指定するには、以下のコンパイル オプションを使用します。
-entry-points <name>
-cyclic-tasks <name>
-interrupts <name>
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: Exception handling |
| カテゴリ: Required、Partially automated |
バージョン履歴
R2020b で導入