### 6-3　ブレークポイントの設定

CodeScapeでは、メモリ範囲へのデータアクセスや外部周辺機器でのブレークポイントなどを含め、ブレークポイントの設定が可能です。 ブレークポイントを設定するには次の操作を行います。

- ［Debug］メニューをクリックし、［Breakpoints］をポイントし、次に［Configure Breakpoint（s）...］をクリックする（［Ctrl］＋［F5］キー）。
- 右クリックし、［Breakpoints］をポイントし、次に［Configure Breakpoint（s）...］をクリックする。
- ［Breakpoint］ツールバーで をクリックする。

ブレークポイントを追加して、それを［Configure Breakpoint（s）］ダイアログボックスを使用して、手操作で設定することもできます。 ウォッチブレークポイントは、データアクセスでトリガされ、コードブレークポイントは、命令サイクルのフェッチ−実行フェーズでトリガされます。

#### ［Configure Breakpoint（s）］ダイアログボックス

［Configure Breakpoint（s）］ダイアログボックスでは次のことができます。

- コードブレークポイントとウォッチブレークポイントの追加、削除、設定
- ブレークポイントの有効化と無効化、ロケーションと使用するリソースのセット
- ブレークポイントが発生する時点の指定
- ブレークポイントが発生したときのプロンプトの設定

#### ［Code Settings］タブの使用

コードブレークポイントは、命令の実行によってトリガされます。コードブレークポイントがトリガされるとき、PCはパイプライン中の命令と同一の命令を指します。設定するコードブレークポイントを追加または設定すると、［Code Settings］タブが使用可能になります。

1. 次のいずれかを行います。
   - リストから設定するコードブレークポイントを選択する。
   - コードブレークポイントを追加するコードをクリックして設定する。
2. ［Breakpoint Enabled］（デフォルト）を選択して、ブレークポイントを有効にします。
   無効化されたブレークポイントを再設定するようにプロンプトがでることがあります。これはコード実行中、セッションの回復中、またはこのダイアログボックス中でコマンドを設定中に属性の有効性が確認できないときに起こります。無効化されたブレークポイントはコード実行に影響を与えません。またハードウェア リソースを消耗することもありません。
3. 実行を中止するコードのメモリ中の位置を指定します。［Location Expression］テキストボックスで、次のいずれかを行います。
   - 式を入力する。
   - ［Define］をクリックする。［Breakpoint location expression］ダイアログボックスが表示されます。ここでは式を評価してアドレスをセットします。
4. 次に次のいずれかを行います。
   - C/C＋＋の式構文を使用するには、［C/C＋＋］を選択する。
   - SHxアセンブラ言語構文を使用するには、［Assembly］を選択する。
5. ［Implementation mechanism］グループボックスで、次のいずれかを行います。
   - ［Automatic］を選択するとCodeScapeがブレークポイントのリソースを管理します。デフォルトでは、ブレークポイントはソフトウェアでインプリメントされます。これが不可能な場合は、ハードウェアのリソースが使用されます。
   - ソフトウェア ブレークポイントを指定するには、［Software］を選択する。
   - Dev.Boxのプロセッサに固有のブレークポイントをセットするには、［Hardware］を選択する。

#### ［Watch Settings］タブの使用

ウォッチ（データ）ブレークポイントは、メモリのデータアクセスによりトリガされます。ウォッチブレークポイントがトリガされるとき、PCはパイプライン中で、ブレークポイントの数命令先に進んでいます。

設定するウォッチブレークポイントを選択すると、［Watch Settings］タブが使用可能となります。

1. 次のいずれかを行います。
   - リストから設定するウォッチブレークポイントを選択する。
   - 設定するウォッチブレークポイントを追加するにはWatchをクリックする。
2. ［Breakpoint Enabled］（デフォルト）を選択してブレークポイントを有効にします。
   無効化されたブレークポイントを再設定するようにプロンプトがでることがあります。これはコード実行中、セッションの回復中、またはこのダイアログボックス中でコマンドを設定中に属性の有効性が確認できないときに起こります。無効化されたブレークポイントはコード実行に影響を与えません。またハードウェア リソースを消耗することもありません。
3. ブレークポイントがアクセスされるメモリ中の位置を指定します。［Location Expression］テキストボックスに、次のいずれかを入力します。
   - 式を入力する。
   - ［Define］をクリックする。［Breakpoint location expression］ダイアログボックスが表示されます。ここでは式を評価してアドレスをセットします。
4. ウォッチアクセスブレークポイントを、UBC （User Break Controller）の機能を使用するウォッチデータブレークポイントに変更するには、［Include Data Condition］を選択します。必要な［Data Expression］を入力し、［Define］をクリックします。［Breakpoint watch data Expression］ダイアログボックスが表示されます。式を評価して、ロケーションアドレスを設定します。
5. 次のいずれかを行います。
   - C/C＋＋の式構文を使用するには、［C/C＋＋］を選択する。
   - アセンブラ式構文を使用するには、［Assembly］を選択する。
6. ［Implementation Mechanism］に、必要なインプリメンテーション メカニズム（デフォルトはany）を入力します。このオプションはSH4プロセッサにのみ有効です。
7. ［Access Size］に必要なアクセスサイズ（デフォルトは［Any］）を入力します。ウォッチブレークポイントを追加するときに［Toggl］eを使用し、そのサイズが分かっている場合は、［Any］の代わりにそれを使用します。
8. ［Access Type］で、必要なアクセスタイプを選択します。デフォルトは［Both］で読み出し、書き込みの両アクセスです。

#### ［General Conditions］タブの使用

［General Conditions］タブを使用して、ブレークポイントがトリガされる条件を定義します。ブレークポイントに条件を付け、メモリアクセスのタイプとデータの値、またトリガカウントを指定することができます。

1. 条件式を使用するには、［Include Conditional Expression］を選択します。
2. 次のいずれかを行います。
   - ［Include Conditional Expression］テキストボックスに式を入力する。
   - ［Define］をクリックして［Breakpoint condition expression］ダイアログボックスを開き、式を定義する。
3. 次のいずれかを行います。
   - C/C＋＋の式構文を使用するには、［C/C＋＋］を選択する。
   - トリガカウント（SHxアセンブラ言語構文）を使用するには、［Assembly］を選択する。
   式は論理式として評価され、値0は偽（false）を、0以外の値は真（true）を表します。
4. トリガ条件を含めるには、［Include Trigger Condition］選択します。現行カウントが指定された［Trigger Count］値に達した時に条件が真になります。
5. ［Trigger Count Condition］が真となるために必要な現行カウントの値を入力します。
6. ［Counters］で、［Current］ボックスの値がセットした［Trigger］ボックスの値と一致することを確認します。［Reset Current］をクリックすると、現行カウントがリセットされます。
7. カウンタをインクリメントする条件を選択します。デフォルトではブレークポイントが発生するか評価された時点に毎回現行カウントがインクリメントされます。
8. 式とカウント条件の両方が含まれている場合は、ブレークする条件を選択します。デフォルトは［OR］です。

#### ［Trigger Actions］タブの使用

ブレークポイントがトリガされたときにCodeScapeの動作を指定するには、［Trigger Actions］タブのチェックボックスを使用します。

- ［Halt execution when conditions match］
  ブレークポイントの条件を満足したときに、プログラムの実行を停止します。他の指定されたすべての動作が実行された後にプログラムの実行を再開するには、このチェックボックスをクリアします。
- ［Single Shot - breakpoint is discarded when conditions match］
  ブレークポイントがすべてトリガされ、条件を満足した後に廃棄します。
- ［Message box prompt when conditions match］
  ブレークポイントがトリガされ、すべての条件を満足したときに、メッセージを表示します。
- ［Beep when conditions match］
  ブレークポイントがトリガされ、すべての条件を満足したときに、PCのビープ音が鳴ります。
- ［Cause processor profiling to］
  ブレークポイントがトリガされたときに、シミュレータの開始または停止を指定します。
- ［Log when］
  ブレークポイントがトリガされたとき、または毎回、ログを生成します。有効なログ式を入力します。

Dev.Boxのプロセッサ用の［Log］リージョンがない場合は、CodeScapeが作成します。

#### ［Advanced］タブを使用してコードブレークポイントのオプションを指定

［Location Address］テキストボックスは読み出し専用です。ロケーションをセットするには［Code Settings］タブをクリックします。 ［ASID］プロパティは、現在はデフォルトの設定になっていて変更できません。将来のリリースで有効になる予定です。

［Advanced］タブには、ハードウェア インプリメンテーションメカニズムを使用するコマンドがあります。これらのコマンドはウォッチブレークポイントとコードブレークポイントのみに適用されます。

1. マスクして無視する［Location Address］のビットを指定するには［Location Mask］を選択します。［Location Address］の対応するビットを無視するには［Location Mask］を1にセットし、そうでなければ0にします。
2. ［Break Mode］テキストボックスで次のいずれかを選択します。
   - ［Before Execution.］
   - ［After Execution.］

#### ［Advanced］タブを使用してウォッチブレークポイントのオプションを指定

［Location Address］テキストボックスは読み出し専用です。ロケーションをセットするには［Code Settings］タブをクリックします。 ［ASID］プロパティは、現在はそのデフォルトの設定になっていて変更できません。将来のリリースで有効になる予定です。

［Advanced］タブには、ハードウェアインプリメンテーションメカニズムを使用するコマンドがあります。これらのコマンドはウォッチブレークポイントとコードブレークポイントのみに適用されます。

1. マスクして無視する［Location Address］のビットを指定するには［Location Mask］を選択します。［Location Address］の対応するビットを無視するには［Location Mask］を1にセットし、そうでなければ0にセットします。
2. ［Data Mask］テキストボックスで、対応する［Data Address］のビットを無視するには［Data Mask］のビットを1にセットし、そうでなければ0にセットします。
3. ［Bus cycle］フィールドで、含めるバスサイクルを［CPU］、［Peripheral（DMA）］、または両方の中から選択します。

#### ［Global］タブを使用してHitachi SH4-EVAプロセッサ用のデバッグ環境を指定

［Global］タブには、Dev.Boxのプロセッサのデバッグ環境をセットするコマンドがあります。［Global］タブは、［SH4-EVA］プロセッサに接続したときに表示され、必要なオプションを指定することができます。

1. ［Global ASE Break Conditions for SH4-EVA CPU］フィールド。
   - ［Enable on-chip access detection］を選択すると、CodeScapeはオンチップのI/O例外を生成します。
     表示される値は、例外が発生したときに最後にアクセスされたオンチップアドレス、そして最後にアクセスされたオンチップ データです。
   - ［Enable break after LDTLB function］を選択すると、CodeScapeはLDTLB命令ブレークを生成します。
     表示される値は、最後にロードされたPTEH、そして最後にMMUにロードされたPTELです。
2. ［Global UBC Exception Handler Option］フィールドで、［Use DBR vector］（デフォルト）を選択します。

   CodeScapeはUBCのdebug stub default例外ハンドラを使用します。これにより、UBCブレークポイントの動作を変えずに、自分のプログラム中に例外処理ルーチンを定義し、VBRを変更することが可能になります。

#### 6-3-1　ブレークポイント式のフォーマット

CodeScapeには、式を［Log］ウインドウ中に表示する方法を制御できる強力な式フォーマット機能があります。フォーマット定義はCの print（f） 関数と同様に使用できるフォーマット式によって管理されます。式はフォーマット文字列に続く、任意数のカンマ区切りの式によって構成されます。式は0から番号づけられ、レジスタ名やメモリロケーションを参照する任意のスロット式です。フォーマット式の構文は次の通りです。

［”FormattingString”|FormattingString］、［Expression］...

#### フォーマット指定（Specification）

指定（Specification）は「％」記号で開始し、その後に1つ以上のコマンド修飾子（modifier）を続けます。指定はフォーマット指示子（Specifier）で終わります。フォーマット文字列は1つ以上のフォーマット指定からなります。 複数の指定を区切るには次のようにします。

- スペースを使用する。
- 指定を引用符で囲み、その各々をカンマで区切る。

フォーマット指定の構文は次の通りです。

％［Pointer］［Width］［Repeat］Specifier

％はフォーマット指定の開始を意味します。指示子（Specifier）は、式の表示に影響を与えるオプションの修飾子（modifier）を制御します。 指示子（Specifier）によって制御されるコマンド修飾子（modifier）

各々の式には、フォーマット指定（「％」文字）と同じ数のオペランドが必要です。オペランドが不足していると、CodeScapeはエラーを発生します。すべての式オペランドは、評価できなければなりません。オペランドの評価結果がセクション相対アドレスとなった場合は、「SectionName：Value」という文字列が表示されます。

#### フォーマット指示子に使用する文字

フォーマット指示文字は、ポインタの制御と式の表示に影響するフォーマット命令に使用されます。

#### ポインタ修飾子（modifier）

パラメータポインタは、位置0から始めて、現在の式の位置を指示します。コマンドポインタ修飾子はパラメータポインタの位置を変更し、直接「％」記号の後に続きます。修飾子は、オプションの「＋」または「−」記号を付した10進数で構成され、「＃」記号で終わります。

構文

［＋ | −］Number＃

ポインタを最初のポインタパラメータの前にある値にセットすると、CodeScapeはそれを最初のパラメータにセットします。ポインタを最後のポインタパラメータの後にある値にセットすると、その後の指定子は無効となり、表示文字列にそのままコピーされます。

#### 例

3つのパラメータを符号付き10進整数で逆順に表示するためのフォーマット文字列。

％2＃d ％l＃d ％0＃d

パラメータを最初に16進で、次に10進で表示するためのフォーマット文字列。

”％0＃x， ％−l＃d”

#### 幅修飾子（modifer）

オプションの幅修飾子（modifer）は、式の表示幅を指定します。その後に＃修飾子が続きます（ポインタ修飾子が指定されない場合は「％」）。幅は、10進数か、後続のパラメータ式の値です。

構文

［−］［Number |＊］

「％s」フォーマットでは、幅は表示する最大文字数を意味します。

#### 繰り返し修飾子（modifier）

オプションの繰り返し修飾子（modifier）は、表示する項目数を制御し、指定する場合はポインタ修飾子と幅修飾子がそれに続きます。修飾子は「＠」記号にオプションのサイズ修飾子が続き、表示する項目数で終了します。 表示項目の区切りは次の通りです。

- フォーマット指定子が10進または8進の場合は、カンマ
- 指定子が16進の場合は、スペース
- 指定子が文字の場合は、カンマやスペースなし

複数バイトの項目にフェッチする場合、Dev.Boxのプロセッサのエンディアンは保持されます。

フォーマット指定子が文字列や命令の場合は、繰り返し修飾子は無効です。

構文

＠［Size］Number

[←] | [INDEX] | [→]