• 検索結果がありません。

不正な実行を検出して停止する【IECUBE】

2. 機  能

2.8 プログラムの停止(ブレーク)

2.8.6 不正な実行を検出して停止する【IECUBE】

- その他のブレーク要因の発生

備考 この操作は, ボタンをクリックしたのち, ボタンをクリックした場合と同等です。

2.7.2.2 現在のアドレスから実行する

現在のアドレス(カレントPC値で示されるアドレス)からプログラムの実行を開始する方法には,次の種類があり ます。

(1) 通常の実行

デバッグ・ツールバーの ボタンをクリックします。

この操作により実行を開始した場合,次のいずれかの状態までその実行を続けます。

- ボタンのクリック(「2.8.2 プログラムの実行を手動で停止する」参照)

- PCがブレークポイントに到達(「2.8.3 任意の場所で停止する(ブレークポイント)」参照)

- ブレーク・イベント条件の成立(「2.8.4 任意の場所で停止する(ブレーク・イベント)」/「2.8.5 変数/SFR へのアクセスで停止する」参照)

- フェイルセーフ・ブレークの発生(「2.8.6 不正な実行を検出して停止する【IECUBE】」参照)

- その他のブレーク要因の発生

(2) ブレーク関連のイベントを無視した実行

デバッグ・ツールバーの ボタンをクリックします。

この操作により実行を開始した場合,次のいずれかの状態までその実行を続けます。

- ボタンのクリック(「2.8.2 プログラムの実行を手動で停止する」参照)

- フェイルセーフ・ブレークの発生(「2.8.6 不正な実行を検出して停止する【IECUBE】」参照)

- その他のブレーク要因の発生

備考 この操作により実行を開始した場合,アクション・イベントの発生も無視されます。

(3) キャレット位置までの実行

エディタ パネル/逆アセンブル パネルにおいて,プログラムを停止させたい行/命令にキャレットを移動した のち,コンテキスト・メニューの[ここまで実行]を選択します。

この操作により実行を開始した場合,次のいずれかの状態までその実行を続けます。

- PCがキャレット位置のアドレスに到達

- ボタンのクリック(「2.8.2 プログラムの実行を手動で停止する」参照)

- フェイルセーフ・ブレークの発生(「2.8.6 不正な実行を検出して停止する【IECUBE】」参照)

- その他のブレーク要因の発生

注意 キャレット位置の行に対応するアドレスが存在しない場合は,下方向の有効な行までプログラム を実行します(有効な行が存在しない場合は,エラーとなります)。

備考 この操作により実行を開始した場合,アクション・イベントの発生も無視されます。

2.7.2.3 PC 値を変更してから実行する

カレントPC値を任意のアドレスに強制的に変更したのち,プログラムを実行します。

この操作を行うには,まず,エディタ パネル/逆アセンブル パネルにおいて,プログラムの実行を開始したい行/命 令にキャレットを移動したのち,コンテキスト・メニューの[PCをここに設定]を選択します(カレントPC値が現在 キャレットのある行/命令のアドレスに変更されます)。

次に,「2.7.2.2 現在のアドレスから実行する」で示した,いずれかの実行方法を行います。

2.7.3 プログラムをステップ実行する

次のいずれかの操作を行うと,現在のアドレス(カレントPC値で示されるアドレス)から,ソース・レベル単位

(ソース・テキスト1行分),または命令レベル単位(1命令分)でプログラムをステップ実行したのち,自動的に停止 します。

プログラムの停止後は逐一各パネルの内容が自動的に更新されるため,ステップ実行は,プログラムの実行遷移を ソース・レベル単位/命令単位でデバッグする場合に有効な実行方法です。

なお,ステップ実行を行う際の実行単位は,次に示すようにエディタ パネルにおける設定に依存します。

- ツールバーの ボタンを無効にしている場合(デフォルト)

ソース・レベル単位によるステップ実行を行います。

ただし,逆アセンブル パネルにフォーカスがある場合,またはカレントPC値で示されるアドレスに行情報が存在 しない場合は,命令レベル単位によるステップ実行を行います。

- ツールバーの ボタンを有効にしている場合 命令レベル単位によるステップ実行を行います。

備考 ボタンは,エディタ パネルを混合表示モードに設定している場合のみ有効となります(「CS+ 統合

開発環境 ユーザーズマニュアル エディタ編」参照)。 ステップ実行には,次の種類があります。

2.7.3.1 関数内にステップ・インする(ステップ・イン実行)

2.7.3.2 関数をステップ・オーバする(ステップ・オーバ実行)

2.7.3.3 関数内でリターンが完了するまで実行する(リターン・アウト実行)

注意 1. ステップ実行中は,設定されているブレークポイント/ブレーク・イベント/アクション・イベントを 発生しません。

注意 2. ステップ実行でスタンバイ・モード(HALT/STOP)に移行する命令を実行した場合,スタンバイ・

モード命令以降の次命令で停止します。

また,使用するデバッグ・ツールによって,次のように動作が異なります。

-【シミュレータ】以外

ステップ実行ではスタンバイ・モードに移行しません。

-【シミュレータ】

ステップ実行でスタンバイ・モードに移行します。

スタンバイ・モードが解除されているように見えますが,スタンバイ・モードが解除されているか否 かは,メイン・ウインドウのステータス・バー上のCPU状態で確認してください。

注意 3. 【シミュレータ】以外

- ステップ実行中は,割り込みが禁止されます。また,フェイルセーフ・ブレーク【IECUBE】を発生 しません。

- ソース・レベル単位でステップ実行を行う場合,CS+は,PSWレジスタのNP/EP/IDフラグを基に 割り込み処理中か否かを判断します。このため,多重割り込みを使用している場合で,上記レジスタ やフラグを変更した場合は,リターン実行が正常に行われない場合があります。

注意 4. 【シミュレータ】

ステップ実行中に割り込みハンドラに飛ぶことがあります。

2.7.3.1 関数内にステップ・インする(ステップ・イン実行)

関数呼び出しの場合,呼び出された関数内の先頭で停止するステップ実行です。

操作は,デバッグ・ツールバーの ボタンをクリックします。

注意 1. デバッグ情報がない関数へのステップ・イン実行はできません。

注意 2. longjmp関数へのステップ・イン実行は,実行処理が完了せずタイムアウト待ちになることがありま す。

注意 3. 関数の入口の処理(プロローグ処理)はスキップされません。

プロローグ処理をスキップさせたい場合は,再度ステップ・イン実行してください。

2.7.3.2 関数をステップ・オーバする(ステップ・オーバ実行)

CALL命令による関数呼び出しの場合,その関数内のソース行/命令すべてを1ステップとみなして実行し,関数か ら戻った箇所で停止するステップ実行です(CALL命令を実行したときと同じネストになるまで,ステップ実行しま す)。

操作は,デバッグ・ツールバーの ボタンをクリックします。

なお,CALL命令以外の場合は,ステップ・イン実行と同じ動作となります。

注意 longjmp関数のステップ・オーバ実行は,実行処理が完了せずタイムアウト待ちになることがありま

す。

2.7.3.3 関数内でリターンが完了するまで実行する(リターン・アウト実行)

現在の関数から,呼び出し元関数に戻った箇所で停止するステップ実行します。

ある関数内において確認が必要なソース行/命令の実行が終了した際などに,この命令によるステップ実行を行うと,

残りの関数内の命令をステップ実行せずに呼び出し元の関数に戻ることができます。

操作は,デバッグ・ツールバーの ボタンをクリックします。

注意 1. main関数内でのリターン・アウト実行は,スタート・アップ・ルーチン内でブレークします。

注意 2. longjmp関数の呼び出し元関数内でリターン・アウト実行すると,ブレークしないことがあります。

注意 3. 再帰関数からリターン・アウト実行を行うと,フリーラン状態となります。

2.8 プログラムの停止(ブレーク)

この節では,実行中のプログラムを停止する方法について説明します。

CS+では,次のブレーク機能を使用して任意の箇所でプログラムを停止させることができます。

(1) 強制ブレーク機能

強制的にプログラムの実行を停止する機能です。

(2) ハードウエア・ブレーク機能

デバッグ・ツールが,ハードウエアの資源を使用してプログラム実行中にブレーク条件を逐次確認し,条件を満 たした際にプログラムを停止させる機能です。

なお,ハードウエア・ブレーク・イベントには,任意の箇所でプログラムの実行を停止させる“実行系”と,任 意の変数などに指定したアクセスがあった際にプログラムの実行を停止させる“アクセス系”があります。

備考 1. 【IECUBE】

ハードウエア・ブレーク・イベント(実行系)には,指定したアドレスの命令実行前にブレーク する“実行前ブレーク”と,命令実行後にブレークする“実行後ブレーク”があります。CS+で は,ハードウエア・ブレーク・イベントを設定する際,まず“実行前ブレーク”の資源を使用し,

資源がなくなり次第,“実行後ブレーク”の資源を使用します(「2.15.7.1 有効イベント数の制限」

参照)。そのため,ユーザが実行前/実行後のどちらかを選択することはできません。

備考 2. 【E1】【E20】【EZ Emulator】

ハードウエア・ブレーク・イベント(実行系)は,指定したアドレスの命令実行後にブレークす る“実行後ブレーク”となります。

備考 3. 【シミュレータ】

ハードウエア・ブレーク・イベント((実行系)は,指定したアドレスの命令実行前にブレークす る“実行前ブレーク”と,命令実行後にブレークする“実行後ブレーク”を選択することができま す(「2.8.1.3 【シミュレータ】の場合」参照)。

(3) ソフトウエア・ブレーク機能(【シミュレータ】以外)

指定したアドレスの命令コードを一時的にブレーク用の命令に書き換え,その命令を実行した際にプログラムを 停止させる機能です。

注意 1. スタンバイ・モード(HALT/STOP)中に強制ブレークを行った場合,カレントPC値はスタンバイ・

モード命令以降の次命令のアドレスとなります。

また,使用するデバッグ・ツールによって,次のように動作が異なります。

-【シミュレータ】以外

強制ブレークによりスタンバイ・モードを解除します。

-【シミュレータ】

強制ブレークによりスタンバイ・モードを解除しません。

スタンバイ・モードが解除されているように見えますが,スタンバイ・モードが解除されているか否 かは,メイン・ウインドウのステータス・バー上のCPU状態で確認してください。

注意 2. 【E1】【E20】【EZ Emulator】

ブレーク時にターゲット・システムの電圧を下げないようにしてください。ブレーク中に低電圧検出回 路(LVI),またはパワーオン・クリア(POC)によるリセットが発生した場合,CS+の不正動作や通 信エラーの原因となる場合があります。

なお,ターゲット電源OFFのエミュレーション中でのブレークもこれに該当します。

備考 実行中のプログラムが停止すると,その原因(ブレーク要因)がメイン・ウインドウのステータスバー に表示されます。

2.8.1 ブレーク動作の設定をする

ブレーク機能を使用するためには,あらかじめブレーク動作に関する設定を行う必要があります。

ブレーク動作の設定は,プロパティ パネルの[デバッグ・ツール設定]タブ上の[ブレーク]カテゴリ内で行いま す。

なお,設定内容は,使用するデバッグ・ツールにより異なります。

2.8.1.1 【IECUBE】の場合

2.8.1.2 【E1】/【E20】/【EZ Emulator】の場合 2.8.1.3 【シミュレータ】の場合