Main Content

実行時のエラーのデバッグ

MATLAB® 関数内に実行時のエラーがあると、MATLAB コマンド ウィンドウに実行時スタックが表示されます。エラー メッセージとスタック情報を使用してエラー原因の詳細を入手してから、問題を修正するかエラー処理コードを追加します。詳細は、実行時スタックでのエラーの表示実行時のエラーの処理を参照してください。

実行時スタックでのエラーの表示

実行時スタックについて

実行時スタックは、MATLAB による MEX コードの生成に対して、既定で有効になっています。エラー原因についての詳細を知るために、エラー メッセージと以下のスタック情報を使用します。

  • エラーを生成した関数の名前

  • 実行しようとした処理の行番号

  • その関数の実行に至るまでに呼び出された一連の関数、および各関数の呼び出しが行われた行

実行時スタック トレースの例.  この例では、MEX 関数 mlstack_mex に対する実行時スタック トレースを示します。

mlstack_mex(-1)
Index exceeds matrix dimensions.  Index
value -1 exceeds valid range [1-4] of
array x.

Error in mlstack>mayfail (line 31)
y = x(u);

Error in mlstack>subfcn1 (line 5)
switch (mayfail(u))

Error in mlstack (line 2)
y = subfcn1(u);

スタック トレースは次の情報を提供します。

  • エラー タイプ

    ??? Index exceeds matrix dimensions.
    Index value -1 exceeds valid range [1-4] of array x.

  • エラーの発生場所

    Error in ==>mlstack>mayfail at 31
    y = x(u);

  • エラーが起きるまでの一連の関数呼び出し

    Error in ==> mlstack>subfcn1 at 5
    switch (mayfail(u))
    
    Error in ==> mlstack at 2
    y = subfcn1(u);

実行時スタックを使用するケース

デバッグ中の実行時スタックは実行時のエラーの原因を突き止めるのに役立ちます。ただし、スタックが有効になっていると、生成されたコードに実行時スタックを保持するための命令が含まれ、実行時間が低下することがあります。実行時間を向上させるには、実行時スタックを無効にしてください。

実行時スタックの無効化.  実行時チェックを無効にする方法で説明されているように、メモリの整合性チェックを無効にすることで実行時スタックを無効にできます。

注意

メモリの整合性チェックを無効にする前に、配列の範囲や次元のチェックが一切必要ないことを確認します。

実行時のエラーの処理

コード ジェネレーターはエラー ID を伝播します。MATLAB コードがエラーまたは警告をスローする場合は、テスト ベンチ コードで try-catch ステートメントを使用してエラー情報を調べて回復を試みるか、クリーンアップして停止します。たとえば、実行時スタック トレースの例にある関数の場合、以下を含むテスト スクリプトを作成します。

try
    mlstack_mex(u)
catch
    % Add your error handling code here
end
詳細は、try/catch ステートメントを参照してください。