スタンドアロンの Stateflow チャートのデバッグ
スタンドアロンの Stateflow® チャートは、有限ステート マシンの動作を定義する MATLAB® クラスです。スタンドアロンのチャートは、MATLAB をアクション言語として Classic チャートのセマンティクスを実装します。Simulink® でのコード生成が制限されている関数を含めて、MATLAB のすべての機能を使用してチャートをプログラミングできます。詳細については、MATLAB オブジェクトとして実行する Stateflow チャートの作成を参照してください。
デバッグを有効にするには、スタンドアロンのチャート、またはチャートを実行する MATLAB スクリプトでブレークポイントを設定します。ブレークポイントによってチャートの実行が一時停止されます。実行が一時停止している間に、チャート内の各アクションをステップ実行したり、データ値を表示したり、MATLAB ワークスペースを操作してチャートのステートを調べたりすることができます。
メモ
MATLAB スクリプトから実行するスタンドアロンのチャートをデバッグするときは、まず Stateflow エディターを開きます。エディターを 1 回も開かずにスタンドアロンのチャートをデバッグしようとすると、予期せぬ結果が生じる可能性があります。
Simulink モデルでの Stateflow チャートのデバッグの詳細については、チャートのデバッグのためのブレークポイントの設定を参照してください。
ブレークポイントの設定とクリア
ブレークポイントは、円形の赤のバッジとして表示されます。たとえば、以下のチャートでは、ステート A
と、A
から B
への遷移にブレークポイントが含まれています。
ブレークポイントは、チャート、ステートおよび遷移に設定できます。
チャート上のブレークポイント
チャートにブレークポイントを設定するには、チャート内を右クリックして [チャート Entry 時にブレークポイントを設定] を選択します。このタイプのブレークポイントは、チャートに入る前に実行を一時停止します。
ブレークポイントを削除するには、チャート内を右クリックして、[チャート Entry 時にブレークポイントを設定] オプションをオフにします。
ステートおよび遷移上のブレークポイント
ステートおよび遷移では、さまざまなタイプのブレークポイントを設定できます。
オブジェクト | ブレークポイントのタイプ |
---|---|
ステート |
|
| |
| |
遷移 |
|
|
ステートまたは遷移にブレークポイントを設定するには、ステートまたは遷移を右クリックして [ブレークポイントの設定] を選択します。ステートの場合、既定のブレークポイントは [ステート Entry 時]
と [During ステート]
です。遷移の場合、既定のブレークポイントは [遷移が有効な場合]
です。ブレークポイントのタイプを変更するには、ブレークポイントのバッジをクリックして、別のブレークポイントの構成を選択します。詳細については、ブレークポイントのタイプと条件の管理を参照してください。
ブレークポイントを削除するには、ステートまたは遷移を右クリックして [ブレークポイントのクリア] を選択します。チャート内のブレークポイントをすべて削除するには、チャート内を右クリックして [Clear All Breakpoints In Chart] を選択します。
ブレークポイントのタイプと条件の管理
1 つのブレークポイント バッジで複数のタイプのブレークポイントを表すことができます。ステートまたは遷移に設定されているブレークポイントのタイプをリストするツールヒントを表示するには、そのバッジにカーソルを合わせます。この例では、ステート A
のバッジは 2 つのブレークポイント タイプ [ステート Entry 時]
と [During ステート]
を表しています。
オブジェクトのブレークポイントのタイプを変更するには、ブレークポイント バッジをクリックします。[ブレークポイント] ダイアログ ボックスでは、オブジェクト タイプに応じて別のブレークポイントの設定を選択できます。[ブレークポイント] ダイアログ ボックスですべてのチェック ボックスをオフにすると、ブレークポイントが削除されます。
実行がブレークポイントで停止する回数を制限するには、ブレークポイントに条件を追加します。既定では、Stateflow チャートは、ブレークポイントに達するたびに一時停止します。ブレークポイントに条件を追加すると、チャートは条件が真の場合にのみブレークポイントで一時停止します。たとえば、以下の条件では、x
の値が負の場合にのみ、ステート A
のブレークポイントがチャートの実行を一時停止します。
ブレークポイントの条件を指定するには、数値およびブレークポイントの位置でスコープ内にある Stateflow データ オブジェクトを組み合わせた任意の有効な MATLAB 式を使用できます。
ブレークポイント後のチャート実行の制御
実行がブレークポイントで停止すると、Stateflow はデバッグ モードに入ります。
MATLAB コマンド プロンプトが
K>>
に変わります。[シンボル] ペインに、チャート内の各データ オブジェクトの値が表示されます。
チャートではアクティブな要素が青色で、現在実行中のオブジェクトが緑色で強調表示されます。
たとえば、ステート A
のブレークポイントで実行が停止すると、このステートの境界線とステートの entry
アクションの最初のステートメントが緑で強調表示されます。
実行が一時停止されるグラフィカル オブジェクトに、実行ステータス バッジが表示されます。
バッジ | 説明 |
---|---|
| 実行はチャートに入る前か、ステートの |
| 実行はステートの |
| 実行はステートの |
| 実行は遷移のテストを行う前に一時停止。 |
| 実行は有効な遷移を行う前に一時停止。 |
チャートがブレークポイントで一時停止しているとき、次を使用して実行を続けることができます。
[デバッグ] タブのボタン
MATLAB コマンド ウィンドウ
キーボード ショートカット
アクション | [デバッグ] タブのボタン | MATLAB コマンド | キーボード ショートカット | 説明 |
---|---|---|---|---|
続行 |
| dbcont | Ctrl + T | 次のブレークポイントまで実行を続行します。 |
ステップ オーバー |
| dbstep | F10 キー (macOS システムでは "Shift+Command+O") | チャート実行の次のステップに進みます。チャート レベルでは、以下のようなステップが考えられます。
詳細については、Stateflow チャートの実行を参照してください。 |
ステップ イン |
| dbstep in | F11 キー (macOS システムでは "Shift+Command+I") | 関数を呼び出すステートまたは遷移のアクションからは、関数内の最初に実行可能なステートメントに進みます。 別の関数呼び出しを含む関数内のステートメントからは、2 番目の関数内で最初に実行可能なステートメントに進みます。 それ以外の場合は、チャート実行の次のステップに進みます ([ステップ オーバー] オプションを参照)。 |
ステップ アウト |
| dbstep out | Shift+F11 (macOS システムでは "Shift+Command+U") | 関数呼び出しからは、関数を呼び出すステートメントに戻ります。 それ以外の場合は、次のブレークポイントまで実行を続行します ([続行] オプションを参照)。 |
停止 |
| dbquit | Ctrl + Shift + T | デバッグ モードを終了して実行を中断します。 スタンドアロンのチャートを Stateflow エディターから実行すると、このアクションにより、チャート オブジェクトが MATLAB ワークスペースから削除されます。 |
複数のステートメントを含むステート アクションまたは遷移アクションでは、[ステップ オーバー] を選択することにより、個々のステートメントを 1 つずつステップ実行できます。Stateflow エディターでは、各ステートメントが実行前に強調表示されます。
メモ
スタンドアロン チャートはクロック時間に基づいて時相論理を定義するので、チャートがブレークポイントで一時停止している間に時相論理演算子が有効になる可能性があります。この場合、チャートはデバッグ モードから出て、次のブレークポイントまで実行を継続します。
チャート データの値の確認と変更
Stateflow がデバッグ モードのとき、[シンボル] ペインには、チャート内の各データ オブジェクトの値が表示されます。チャート内でステートまたは遷移をポイントすることによってデータ値を調べることもできます。ツールヒントには、選択したステートまたは遷移で使用されている各データ オブジェクトの値が表示されます。
チャートの動作をテストするために、[シンボル] ペインで、実行中にデータ オブジェクトの値を変更することができます。あるいは、デバッグ プロンプトで、チャート オブジェクト名の代わりに this
というキーワードを使用して新しい値を入力します。たとえば、ローカル データ x
の値を変更するには、次のように入力します。
this.x = 7
メモ
Simulink モデルのチャートをデバッグする場合、キーワード this
は使用しないでください。代わりに、デバッグ プロンプトで直接すべての Stateflow データにアクセスできます。詳細については、MATLAB コマンド ウィンドウでのデータの表示と変更を参照してください。