## 第6章　デバッグ

デバッグ操作には次のものがあります

- プログラムのコードをトレースする。
- 変数や制御構造をチェックする。
- ブレークポイントを設定してプログラム実行を制御する。
- Dev.Boxプロセッサの動作をシミュレートして、プログラム中のアセンブラのクリティカルなループを最適化する。

ツールバーを使用すると、デバッグの主な機能にアクセスできます。ツールバーの表示と非表示を切り替えるには、Configurationチェックボックスを使用します。

### 6-1　プログラムの実行と停止

#### プログラムの実行（Run）

1. ［Target］リージョンで、プログラムがロードされたプロセッサを選択します。
2. 次のいずれかを行います。
   - ［Debug］メニューをクリックし、［Execution］をポイントして、次に［Run］をクリックする（［F9］キー）。
   - 右クリックし、［Execution］をポイントして、次に［Run］をクリックする。
   - ［Debug］ツールバーのをクリックする。

プログラムは、停止されるか、エラーが起こるまで実行されます。プログラム実行中は［F9］キーを押すと停止します。

#### すべてのプロセッサを同時に実行（Run ALl）

次のいずれかを行います。

- ［Debug］をクリックし、［Execution］をポイントし、次に［Run All］（［Ctrl］＋［F9］キー）をクリックする。
- 右クリックし、［Execution］をポイントして、次に［Run All］をクリックする。
- ［Debug］ツールバーの をクリックする。

プログラムの実行は、ブレークポイントまたはエラーの発生で停止します。

#### カーソル位置までプログラム実行（Run to Cursor）

アクティブな［Source］リージョンまたは［Disassembly］リージョンで、次のいずれかを行います。

- ［Debug］メニューをクリックし、［Execution］をポイントし、次に［Run to Cursor］（［Alt］＋［F9］キー）をクリックする。
- 右クリックし、［Execution］をポイントし、次に［Run to Cursor］をクリックする。
- ［Debug］ツールバーの をクリックする。

プログラムの実行中に［Run to Cursor］を使用して、いつでもブレークポイントを追加できます。プログラムはブレークポイントまで実行されると停止します。プログラムの実行はカーソル位置かブレークポイントで停止するか、またはエラーが起こると停止します。

#### 指定アドレスを実行するまでプログラムを実行（Run to Address）

1. 次のいずれかを行います：
   - ［Debug］メニューをクリックし、［Execution］をポイントし、次に［Run to Address］（［Shift］＋［F9］）をクリックする。
   - 右クリックし、［Execution］をポイントし、次に［Run to Address］をクリックする。
   - ［Debug］ツールバーのをクリックする。
2. ［Run to Address/Instructions］ダイアログボックスの［Expression］テキストボックスにアドレスを入力します。
3. ［OK］ボタンをクリックします。

アドレスとは、関数名またはアドレスとして解決される式です。

プログラムの実行中［Run to Address］を使用して、いつでもブレークポイントを追加できます。プログラムはブレークポイントまで実行されると停止します。プログラムの実行は指定アドレスかブレークポイントで停止するか、またはエラーが起こると停止します。

#### プログラムの停止（Stop）

プログラムの実行を停止するには、［Target］リージョンでプログラムがロードされたプロセッサを選択し、次のいずれかを行います。

- ［Target］ウィンドウ中で右クリックし、［Execution］をポイントしてから右クリックし、そして［Stop］をクリックする。
- ［Debug］ツールバー上で をクリックする。
- ［Debug］メニューをクリックし、［Execution］をポイントし、次に［Stop］をクリックする。
- ［F9］キーを押す。

プロセッサは直ちに停止します。

#### すべてのプログラムを同時に停止（Stop All）

実行中のすべてのプログラムを同時に停止するには、次のいずれかを行います。

- ［Target］ウィンドウ中で右クリックし、［Execution］をポイントし、そして［Stop All］をクリックする。
- ［Debug］ツールバー上で をクリックする。
- ［Debug］メニューをクリックし、［Execution］をポイントし、次に［Stop All］をクリックする。

すべてのプロセッサが直ちに停止します。

#### ソースコードを1行ずつシングルステップ（Step）

次のいずれかを行います。

- ［Debug］メニューをクリックし、次に［Step］（［F7］キー）をクリックする。
- ［Debug］ツールバー上で をクリックする。

アクティブな［Disassembly］リージョン（またはソース以外のリージョン）では、Dev.BoxはPCの指す命令を実行します。

アクティブな［Source］リージョンでは、Dev.BoxはPCの指す命令を実行します。ソースの命令1行から生成された低レベルのアセンブラ命令の実行がすべて終了してから停止します。これには次のものが含まれます。

- ソースの1つのマクロ命令に対応するすべての命令。
- 複数のアセンブラ命令を生成するすべてのC命令

後に続くソース行（現在のソース行により変わる）は、実行フローにしたがって決定され、別の関数や別のファイル内のこともあります。

シングルステップを実行すると、実行トレースの履歴が生成されます。 トラップ命令はサブルーチン（BSRまたはJSR）として扱われます。トラップ32はCodeScapeにより予約され、単一命令として扱われます。トラップ32のルーチンにStep intoするには、［Forced Step Into］を使用します。トラップ32にStep intoすると、モニターが失敗することがあります。

#### ステップ実行のアニメーション（Animate Step Run）

各命令の実行ごとにすべてのリージョンを更新するには、［Animate Step Run］（デフォルト）を選択します。

- ［Debug］メニューをクリックし、［Execution］をポイントし、次に［Animate Step Run］をクリックします。

CodeScapeは命令をトレースし、ブレークポイントかstart/stopなどの別なコマンドが発行されるまで、アクティブなウインドウに更新された情報を表示します。

#### 特定条件まで実行（Step Run Until...）

1. 次のいずれかを行います。
   - ［Debug］メニューをクリックし、［Execution］をポイントし、次に［Step Run Until...］をクリックする。
   - ［Debug］ツールバー上でをクリックする。
2. 実行を停止する条件式を［Expression Evaluator］に入力します。

CodeScapeは命令をトレースし、ブレークポイントかstart/stopなどの別なコマンド発行されるまで、アクティブなウインドウに更新された情報を表示します。

式の評価結果が0となった時は、トレースは継続されます。

#### 逆アセンブルレベルでソースコードを1行ずつ強制実行（Forced Step Into）

次のいずれかを行います。

- ［Debug］メニューをクリックし、［Execution］をポイントし、次に［Forced Step Into］をクリックする（［Shift］＋［F7］キー）。
- ［Debug］ツールバー上で をクリックする。

［Forced Step Into］を使用すると、トラップ32にStep intoするなど、通常は許されない個々のアセンブラ命令を、［Disassembly］リージョンで1ステップずつトレースすることができます。 ［Source］リージョンでは、Dev.Boxは現在のレジスタ値を使用してPCの命令を実行し、次に生成された個々のアセンブラ命令で停止します。個々のアセンブラ命令は、ソース レベルのシングルステップの代わりに、逆アセンブルレベルのシングルステップを使用してトレースされます。

Step intoのメカニズム、つまりTrap、Line-A、Line-F、またはサブルーチンの内部に入り、プログラム実行は内部で停止します。1つのソース命令が多くのアセンブラ命令を生成する場合には、次のソース命令に進む前に、ソース命令上で［Shift］＋［F7］キーを数回押す必要があります。

#### ステップ実行を戻す（Unstep）

- ［Debug］メニューをクリックし、次に［Unstep］をクリックする（［Ctrl］＋［F7］キー）。
- ［Debug］ツールバー上で をクリックする。

CodeScapeはトレース実行の履歴を保持しています。トレース履歴は自動的に蓄積され廃棄されます。

Unstepすると、現在のプロセッサとメモリの状況だけが逆にトレースされます。次の内容をUnstepできます。

- 個々の逆アセンブリ命令の一組として実行された命令。
- トレース履歴が残っている限りについて、［Source］と［Disassembly］リージョン中のトレース結果。

一群の命令をStep overした場合は、［Unstep］は使用できません。 コードをStep overすると、それまでのトレース履歴はすべて失われます。

#### ソースコードを1行ずつStep over（Step Over）

次のいずれかを行います。

- ［Debug］メニューをクリックし、次に［Step Over］（［F8］キー）をクリックする。
- ［Debug］ツールバー上で をクリックする。

逆アセンブルされたコードでは、Dev.BoxはPCの指す命令を実行して停止します。トラップ、JSRまたはBSR、は単一の命令として扱われ、プログラム実行はルーチンが終了したときにメモリ内の次の命令で停止します。

ソースコードでは、Dev.BoxはPCの指す命令を実行し、ソースファイルの参照が変わった時に停止します。関数コールをStep overする場合は、その関数全体が実行されます。次のソース行で実行は停止します。

条件ブランチはStep overできません。 Step over実行時にはトレース履歴が生成されます。

#### コードのステップインとステップアウト（Step Run In、Step Run Out）

連続的にネストした各関数コールの開始点まで実行しそこで停止するには、［Step Run In］を使用します。連続的にネストした各関数コールの終了時点まで実行し、そこで停止するには［Step Run Out］を使用します。

#### コードのステップ・ラン・イン（Step Run In）

次のいずれかを行います。

- ［Debug］メニューをクリックし、［Execution］をポイントし、次に［Step Run In］をクリックする（［Shift］＋［F7］キー）。
- リージョンの中を右クリックし、［Execution］をポイントし、次に［Step Run In］をクリックする。
- ［Debug］ツールバー上で をクリックする。

CodeScapeは次の関数の開始点まで実行し、そこで停止します。

#### コードのステップ・ラン・アウト（Step Run Out）

次のいずれかを行います。

- ［Debug］メニューをクリックし、［Execution］をポイントし、次に［Step Run Out］をクリックする（［Shift］＋［F8］キー）。
  ・リージョンの中をクリックし、［Execution］をポイントし、次に［Step Run Out］をクリックする。
- ［Debug］ツールバー上で をクリックする。

CodeScapeは現在の関数の終わりまで実行し、そこで停止します。

#### 実行中のプログラムの停止（Stop）

次のいずれかを行います。

- ［Target］ウィンドウで右クリックし、［Execution］をポイントし、［Stop］をクリックする。
- ［Debug］ツールバー上で をクリックする。
- リージョンの中をクリックし、［Execution］をポイントし、次に［Run to Address］をクリックする。
- リージョンの中をクリックし、［Execution］をポイントし、次に［Run to Cursor］をクリックする。

何らかのトレース操作を行うと、直ちにプログラム実行が停止します。

[←] | [INDEX] | [→]