メインコンテンツ

SIL または PIL の実行中における生成コードのデバッグ

ソフトウェアインザループ (SIL) またはプロセッサインザループ (PIL) の実行に失敗した場合や、元の関数の出力と生成コードの出力に差異がある場合は、デバッガーを有効にして SIL または PIL を再実行できます。ブレークポイントを挿入すると、コード セクションの動作を観察でき、問題の原因を理解するのに役立つことがあります。

SIL または PIL の実行エラーについて、標準出力および標準エラー ストリームからの情報を MATLAB® コマンド ウィンドウに表示することもできます。以下に例を示します。

  • コード内の printf ステートメントからの出力。

  • ランタイム エラーの検出を有効にしている場合は stderr に送信されるメッセージ。

  • 一部の低水準システム メッセージ。

メモ

SIL の実行中に、ターゲット アプリケーションは stdout ストリームと stderr ストリームをリダイレクトします。アプリケーションが終了すると、リダイレクトされたストリームからの情報が MATLAB コマンド ウィンドウに表示されます。ターゲット アプリケーションは、POSIX® 信号 SIGFPESIGILLSIGABRT および SIGSEV を取得する基本的な信号ハンドラーも提供します。この信号ハンドラー用に、ターゲット アプリケーションはファイル signal.h をインクルードします。

SIL のデバッグ

次の表に、デバッガーのサポートに関する情報を示します。

オペレーティング システムサポートされているデバッガー

Windows®

Microsoft® Visual Studio® IDE。

Visual Studio Code と MinGW® GDB。MATLAB Coder™ Interface for Visual Studio Code Debugging サポート パッケージをインストールする必要があります。https://www.mathworks.com/matlabcentral/fileexchange/103555-matlab-coder-interface-for-visual-studio-code-debuggingを参照してください。

Linux®

GNU® データ表示デバッガー (DDD)。

Visual Studio Code と GDB。MATLAB Coder Interface for Visual Studio Code Debugging サポート パッケージをインストールする必要があります。https://www.mathworks.com/matlabcentral/fileexchange/103555-matlab-coder-interface-for-visual-studio-code-debuggingを参照してください。

メモ

SIL デバッグを実行できるのは、MATLAB 製品ファミリでサポートされる Microsoft Visual C++® コンパイラ、Xcode コンパイラ、GNU GCC コンパイラの場合のみです。詳細については、サポートされるコンパイラを参照してください。

MATLAB Coder アプリでデバッグを有効にして SIL 実行を行うには次のようにします。

  1. MATLAB Coder ツールストリップ タブの [検証] セクションで、[生成されたコードの実行] ドロップダウン メニューを開きます。

  2. [検証設定] セクションで、[SIL または PIL でソースレベル デバッグを有効にする] チェック ボックスをオンにします。

  3. [ファイルの実行] オプションを使用してテスト ベンチを選択します。

Windows コンピューターの場合、たとえば、Microsoft Visual Studio IDE で、関数 user_fn_initialize と関数 user_fn の先頭にデバッガーのブレークポイントが設定された状態で user_fn.c ファイルまたは user_fn.cpp ファイルが開きます。

Microsoft Visual Studio displays function with debugger breakpoint.

これで、デバッガーの機能を使用してコードの動作を観察できます。たとえば、コードをステップ実行したり、変数を調べたりできます。

ダイナミック リンク ライブラリ (DLL) を使用する場合、Microsoft Visual Studio は、SIL デバッグ用の関数ブレークポイントごとに 2 つのブレークポイントを適用します。1 つは C/C++ コード関数用、もう 1 つは逆アセンブリ コードの DLL エントリ ポイント用です。デバッガーがコードを実行すると、最初に DLL エントリ ポイントに到達します。C/C++ コード内の対応するポイントに到達するには、[続行] ボタン (F5) をクリックします。

デバッグ セッションを終了するには次のようにします。

  1. すべてのブレークポイントを削除します。

  2. [続行] ボタン (F5) をクリックします。

    SIL 実行が最後まで実行されます。

  3. SIL 実行プロセスを終了するには、[テスト出力] タブで、[実行を終了するには] に続くリンクをクリックします (たとえば clear kalman01_sil)。

    Microsoft Visual Studio IDE が自動的に閉じます。

メモ

[デバッグ][デバッグを中止] を選択すると、SIL 実行がタイムアウトし、次のエラー メッセージが表示されます。

Communications error: failed to send data to the target. There might be 
multiple reasons for this failure.

...
...

PIL のデバッグ

Simulink® とターゲット ハードウェアとの PIL 接続を設定するには、target.ExecutionService オブジェクトと target.DebugExecutionTool オブジェクトを使用してデバッガーを指定します。Support PIL DebuggingおよびDebugExecutionTool Templateを参照してください。

MATLAB Coder アプリでデバッグを有効にして PIL 実行を行うには次のようにします。

  1. MATLAB Coder ツールストリップ タブの [検証] セクションで、[PIL を使用した検証] ドロップダウン メニューを開きます。

  2. [検証設定] セクションで、[SIL または PIL でソースレベル デバッグを有効にする] チェック ボックスをオンにします。

  3. [ファイルの実行] オプションを使用してテスト ベンチを選択します。

参考

トピック