最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

スタンドアロン C/C++ コードでの実行時エラーの検出とレポート

範囲外の配列インデックスなど、実行時エラーを検出して報告するスタンドアロン ライブラリと実行可能ファイルを生成できます。生成されたコードでエラーが検出されると、エラーを報告し、プログラムを終了します。

開発中に、C/C++ コードを生成する前にアルゴリズムの MEX バージョンを実行し、生成されたコードをテストすることをお勧めします。ただし、一部のエラーはターゲット ハードウェアでのみ発生します。このエラーを検出するには、実行時エラー検出を有効にした状態でスタンドアロン C/C++ コードを生成します。実行時エラーの検出は生成されたコードのパフォーマンスに影響する場合があります。パフォーマンスがアプリケーションの考慮事項になっている場合、実行時エラーの検出を有効にした状態で量産コードを生成しないでください。

既定では、実行時エラーの検出はスタンドアロンのライブラリと実行可能ファイルで無効になっています。スタンドアロンのライブラリと実行可能ファイルの実行時エラーの検出とレポートを有効にするには、次を行います。

  • コマンド ラインでコード構成プロパティ RuntimeChecks を使用します。

    cfg = coder.config('lib'); % or 'dll' or 'exe'
    cfg.RuntimeChecks = true;
    codegen -config cfg myfunction
  • MATLAB® Coder™ アプリで、[プロジェクトの設定] ダイアログ ボックスの [デバッグ] ペインで、[実行時エラー チェックの生成] チェック ボックスを選択します。

スタンドアロン コード内の実行時エラーの検出とレポートには、次の要件と制限があります。

  • エラー報告ソフトウェアは fprintf を使用してエラー メッセージを stderr に書き込みます。abort を使用してアプリケーションを終了します。fprintf および abort が使用できない場合、指定しなければなりません。関数 abort はプログラムを突然終了します。信号がシステムでサポートされている場合、中止信号 (SIGABRT) を検出してプログラムの終了を制御できます。

  • エラー メッセージは英語のみです。

  • 一部のエラー チェックは倍精度をサポートしていなければなりません。したがって、生成されたコードが実行されるハードウェアで倍精度演算をサポートしていなければなりません。

  • プログラムが終了すると、エラーの検出とレポート ソフトウェアは実行時スタックを表示しません。スタックを検査するには、デバッガーを追加します。また、エラーの検出とレポート ソフトウェアは割り当てられたメモリなどのリソースを解放しません。

  • プログラムが終了すると、エラーの検出とレポート ソフトウェアは割り当てられたメモリなどのリソースを解放しません。

  • スタンドアロン コードでは、関数 error はエラーが発生したことを示すメッセージを表示します。error によって指定された実際のメッセージを表示するには、MEX 関数を生成して実行しなければなりません。

  • スタンドアロン コードでは、複数の引数で呼び出された場合、関数 assert はエラーを報告せず、実行を終了しません。たとえば assert(cond) などの単一の引数で呼び出されると、cond が定数 true 値でない場合はエラーが報告され、実行は終了します。

関連する例

詳細