[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]

# 10 デバッガの使用方法

本章では次の操作方法について説明します。

- ユーザ・プログラムのソース・コードの表示(第10.1節)

- デバッガ制御下のユーザ・プログラムの編集(第10.2節)

- デバッガの制御下でのユーザ・プログラムの実行(第10.3節)

- ブレークポイントによる実行の中断(第10.4節)

- プログラム変数の検査と操作(第10.5節)

- プログラム変数へのアクセス(第10.6 節)

- レジスタ値の表示と変更(第10.7節)

- ユーザ・プログラムのデコード済み命令ストリームの表示(第10.8節)

- タスキング・プログラムのデバッグ(第10.9 節)

- デバッガのDECwindowsインタフェースのカスタマイズ(第10.10節)

本章ではウィンドウの動作とウィンドウ・メニューの選択項目について説明しますが， 一般的なデバッガ操作の大部分は，コンテキスト依存のポップアップ・ メニューから項目を選択して実行できます。コンテキスト依存のポップアップ・ メニューにアクセスするには，マウス・ポインタをウィンドウ領域に置いてMB3 をクリックします。

DECwindows Motifのコマンド・プロンプトにコマンドを入力することもできます。 デバッガ・コマンドの入力については，第8.3節を参照してください。 この章で紹介しているプログラムEIGHTQUEENS.EXE および8QUEENS.EXEのソース・コードについては， 付録 Dを参照してください。

# 10.1 ユーザ・プログラムのソース・コードの表示

デバッガはユーザ・プログラムのソース・コードをメイン・ウィンドウに表示します( 図 10-1を参照)。

### 図 10-1 ソース・ディスプレイ

実行が中断すると(たとえばブレークポイントで)，デバッガはソース・ウィンドウを更新して， 実行の停止箇所近くのコードを表示します。ソース・ コードの左にある現在位置ポインタは，コードのどの行が次に実行されるかを示します。1 行のソース行は，言語とコーディング方法によって異なりますが，1 つまたは複数のプログラミング言語の文に相当します。

省略時の設定では，ソース・コードの左にコンパイラ生成行番号が表示されます。 この行番号により，ブレークポイント・ビュー( 第10.4.4項を参照)に表示されるブレークポイントを識別できます。 ウィンドウに少しでも多くのソース・コードを表示したいときは， 行番号を表示しないように選択することができます。 行番号を表示するか表示しないかを指定するには，メイン・ウィンドウの「File 」メニューで「Display Line Numbers」を選択します。

「Call Stack」メニューは，ソース・ビューとプッシュ・ボタン・ビューの間にありますが， ここには，表示されているソース・コードのルーチン名が表示されます。

現在位置ポインタは，図 10-1に示されるように通常塗りつぶされています。 表示コードが実行停止ルーチンのコードでない場合， 現在位置ポインタは白抜きになります(第10.1.3項と第10.6.2項を参照)。

スクロール・バーを使用して，ソース・コードを次々と表示することができます。 ただし，一度にスクロールできるのはユーザ・プログラムの1つの モジュールだけの，上下スクロールです。通常，1つのコンパイル単位が1 つのモジュールです。多くのプログラミング言語では，1つのモジュールは1 つのソース・ファイルの内容と対応しています。言語の中にはAda のように，1つのソース・ファイルの中に1つ以上のモジュールを含むものもあります。

次の各項では，プログラムの他の部分のソース・コードを表示する方法ついて説明します。 したがって，各種のモジュールにブレークポイントを設定することなどができます。 第10.1.3 項では，表示するソース・コードが見つからない場合の処置について説明します。 第10.6.2項では，呼び出しスタックで現在アクティブなルーチンのソース・ コードの表示方法について説明します。

メイン・ウィンドウでの操作が終了したら，「Call Stack」メニューをクリックして， 実行の停止箇所を表示し直すことができます。

コンパイル時にプログラムを最適化すると，表示されるソース・コードとプログラム記憶位置の実際の内容とが対応しなくなります( 第1.2節を参照)。

## 10.1.1 別ルーチンのソース・コードの表示

別ルーチンのソース・コードを表示するには，次の手順に従ってください。

1. メイン・ウィンドウの「File」メニューで「Browse Source...」を選択する(図 10-2 を参照) 。「Source Browser」ダイアログ・ボックスに，実行可能なイメージおよびこれにリンクされたすべての共用可能イメージ( たとえば， DEBUGとLIBRTL)の名前が表示される。このとき実行可能なイメージは強調表示される。 このイメージにシンボリック情報がない場合，リンクされたイメージの名前が薄く表示される。

2. 実行可能なイメージの名前をダブル・クリックする。そのイメージ名の下にインデントされて， そのイメージ内の各モジュールの名前が表示される。

3. 表示したいルーチンが含まれているモジュールの名前をダブル・ クリックする。そのモジュール名の下にインデントされて，そのモジュール内の各ルーチンの名前が表示される。 「Display Source」ボタンが強調表示される。

4. ソース・コードを表示したいルーチンの名前をクリックする。

5. 「Display Source」プッシュ・ボタンをクリックする。ルーチンのソース・ コードがソース・ビューに表示され，同時にソース・コードの左に空のブレークポイント・ ボタンが表示される。命令ビューがオープンしている場合， この表示が更新され，そのルーチンの機械語コードが表示される。

第10.6.2項では，呼び出しスタック内にあり， 現在アクティブなルーチンのソース・コードを表示する別の方法を説明しています。

### 図 10-2 別ルーチンのソース・コードの表示

## 10.1.2 別モジュールのソース・コードの表示

別モジュールのソース・コードを表示するには，次の手順に従ってください。

1. メイン・ウィンドウの「File」メニューで「Browse Source...」を選択する。「Source Browser」ダイアログ・ボックスに， 実行可能なイメージおよびこれにリンクされたすべての共用可能イメージ( たとえば，DEBUGとLIBRTL)の名前が表示される。このとき実行可能なイメージは強調表示される。 このイメージにシンボリック情報がない場合， 共有可能なイメージの名前が薄く表示される。

2. 実行可能なイメージの名前をダブル・クリックする。そのイメージ名の下にインデントされて， そのイメージ内の各モジュールの名前が表示される。

3. 表示したいソース・コードを含んでいるモジュールの名前をクリックする。 「Display Source」ボタンが強調表示される。

4. 「Display Source」をクリックする。メイン・ウィンドウのソース表示にそのルーチンのソース・ コードが表示される。命令ビューの命令ディスプレイをオープンしている場合， この表示が更新され， そのルーチンの命令コードが表示される。

## 10.1.3 目的のソース・コードを表示できない場合

ソース・コードを表示できない場合には，次のような原因が考えられます。

- デバッグ・オプションを指定しないでリンクまたはコンパイルされた( を参照)プログラム・モジュール内で実行が一時停止する。

- シンボリック情報が得られないシステム・ルーチンやライブラリ・ ルーチンの中で実行が一時停止する。そのような場合， プッシュ・ボタン・ビューで「S/Ret」ボタンを何回かクリックすれば， その呼び出し元ルーチンの実行にすぐ戻ることができる(第10.3.5項を参照)。

- コンパイル後にソース・ファイルが別のディレクトリに移動されている。 第10.1.4項で，ソース・ ファイルの場所をデバッガに指示する方法について説明する。

表示するソース・コードが見つからない場合，呼び出しスタックにある次のルーチンのソース・ コードの表示が試行されます。そのようなルーチンのソース・ コードが表示される場合，現在位置ポインタは白抜きになり， 戻り先の呼び出し元ルーチンのソース行を示します。

## 10.1.4 ソース・ファイルの記憶位置の指定

ソース・ファイルの特性と記憶位置についての情報は，プログラムのデバッグ・ シンボル・テーブルに入っています。ソース・ファイルがコンパイル後に別のディレクトリに移動された場合， そのソース・ファイルが見つからないことがあります。 ソース・ファイルの記憶位置をデバッガに指示するには，DBG> プロンプトでSET SOURCEコマンドを入力します(第8.3節を参照)。

# 10.2 ユーザ・プログラムの編集

OpenVMSデバッガには簡単なテキスト・エディタが用意されており，ユーザ・ プログラムをデバッグ中にソース・ファイルを編集することができます( 図 10-3を参照)。

デバッガのDECwindows Motifメニュー・インタフェースで使用できるテキスト・ エディタは，簡単な機能のエディタであるため，ランゲージ・センシティブ・ エディタ(LSE)のような優れた機能を持つエディタにはおよびません。 ただし「Commands」メニューの「Edit File」項目で起動するテキスト・ エディタに，このような優れた機能を持つエディタを使用することはできません。 内蔵エディタ以外のエディタを使用する場合は，コマンド・ ビューのDBG>プロンプトでEditコマンドを入力します(本書の第3部にあるEDIT コマンドの項を参照)。

注意
  コマンド・プロンプトに対してEDIT コマンドを入力すると，デバッガはデバッグ・セッションを起動したDECterm ウィンドウをユーザ定義エディタ・ウィンドウとして使用します(COMMANDS EDIT FILE プルダウン・メニューにハードワイヤ接続されているデバッガの組み込みエディタは使用されません) 。この動作により， エディタを柔軟に選択できるようになります。FILE EXITまたはMWM Close を使用して，このDECtermウィンドウを誤って終了した場合には，デバッグ・ セッションは異常終了し，親ウィンドウが失われます。

### 図 10-3 エディタ・ウィンドウ

エディタを起動するには，メイン・ウィンドウの「Command」メニューで「Edit File 」を選択します。省略時の設定では，このエディタによりバッファが1 つオープンされ，ソース・ビューに現在表示されているモジュールがそのバッファに表示されます。 このバッファには，バッファのファイルに関するファイル指定の名前がつけられます。 ソース・ビューにファイルが表示されない場合，main_buffer という名前を持つ空のテキスト・ バッファが表示されます。バッファ名は，エディタ・ビューのメニュー・ バーのすぐ下にあるバッファ・メニューに表示されます。

「File」メニューで「New」(空のテキスト・バッファ)または「Open」(既存のファイル) を選択すると，テキスト・バッファをいくつでも作成することができます。 各テキスト・バッファの名前はバッファ・メニューに表示されます。 バッファ間でテキストのカット，コピー，ペーストを実行するには， 「Edit」メニューで項目を選択してから，バッファ・メニューでバッファを選択します。

前方検索，後方検索，置換の各操作を実行するには，「Find」と「Replace with 」の各フィールドに文字列を入力してから，上下の方向を表した矢印をクリックします。Return キーを繰り返し押すと，文字列が繰り返し検索されます。 「Edit」メニューで「Find/Replace Next」または「Find/Replace Previous 」を選択して検索を繰り返すこともできます。

ファイルを保存するときは，「File」メニューから「Save」または「Save As」を選択します。変更したバッファをクローズしたり，デバッガを終了したりする前に， その内容を保存していない場合は，警告メッセージが表示されます。

ソース・コードを変更して，その結果をテストするときは，次の手順で行います。

1. デバッガを実行していないいDECtermウィンドウを選択する。

2. プログラムをコンパイルし直す。

3. プログラムをリンクし直す。

4. デバッグ・セッションに戻る。

5. メイン・ウィンドウの「File」メニューから「Run Image...」を選択する。

# 10.3 プログラムの実行

この節では次の3つの内容について説明します。

- プログラムの実行停止箇所の特定

- プログラム実行の開始または再開

- プログラムのソース行の1行ずつの実行

現在のデバッグ・セッションで自分のプログラムを再実行したり別のプログラムを実行したりする方法については， 第9.3 節と第9.4節を参照してください。

## 10.3.1 実行の停止箇所の特定

プログラムの実行が一時停止している箇所を明らかにするには，次の手順に従ってください。

1. 現在位置ポインタがソース・ウィンドウに表示されていない場合， ソース・ウィンドウの「Call Stack」メニューをクリックして， 現在位置ポインタを表示する( 図 10-1を参照)。

2. 現在位置ポインタを見る。

   - 塗りつぶしポインタの場合，そのポインタが指しているソース行のコードが次に実行される( 第10.1 節を参照)。この場合「Call Stack」メニューには，常に有効範囲レベル0 のルーチン(実行の停止中)が示される。

   - 白抜きのポインタの場合，表示コードは呼び出し元ルーチンのソース・ コードであり，ポインタは戻り先の呼び出し元ルーチン内のソース行を示している。

     - 「Call Stack」メニューでレベル0が示されている場合， 実行が一時停止しているルーチンのソース・コードの表示はできない( 第10.1.3項を参照) 。

     - 「Call Stack」メニューで0以外のレベルが表示されている場合， 呼び出し元ルーチンのソース・コードが表示されている( 第10.6.2項を参照)。

呼び出しスタック上で現在アクティブなルーチン呼び出しの並びの一覧を表示するには， 「Call Stack」メニューをクリックします。レベル0は実行が一時停止しているルーチンを示し， レベル1は呼び出し元ルーチンを示します。

## 10.3.2 プログラム実行の開始または再開

現在位置からプログラムの実行を開始したり実行を再開したりするには， プッシュ・ボタン・ビューで「Go」ボタンをクリックします(図 8-3 を参照)。

次のような状況では，デバッガの介入なしに自由にプログラムを実行するのが便利です。

- 無限ループの有無をテストする場合。この場合は，まず実行を開始する。 プログラムが終了しないのでループしていると思われる場合は， 「Stop」ボタンをクリックする。メイン・ウィンドウにはユーザが割り込んだ箇所が表示され， 「Call Stack」メニューにはその箇所でのルーチン呼び出しの並びが示される( 第10.3.1 項を参照)。

- プログラムを特定の記憶位置まで直接実行する場合。この場合は， その記憶位置にブレークポイントを設定してから(第10.4節を参照)， 実行を開始する。

プログラムを開始すると，次のいずれかが発生するまで実行が続きます。

- プログラムの実行が完了する。

- ブレークポイントに到達する(条件が真である条件付きブレークポイントを含む) 。

- ウォッチポイントが検出される。

- 例外がシグナル通知される。

- ユーザがプッシュ・ボタン・ビューの「Stop」ボタンをクリックする。

プログラムの実行が中断すると，メイン・ウィンドウの表示が更新され， 現在位置ポインタは次に実行されるコードの行を示します。

## 10.3.3 プログラムのソース行の1行ずつの実行

プログラムのソース行を1行ずつ実行するには，プッシュ・ボタン・ビューで「STEP 」ボタンをクリックするか，またはコマンド・ビューでSTEPコマンドを入力します。 このデバッグ方法(ステップ実行と呼ぶ) はよく使用されます。

ソース行が1行実行されると，ソース・ビューが更新され，現在位置ポインタは次に実行される行を示します。

ソース行とステップ実行の動作については，次の点に注意してください。

- 1行のソース行は，使用する言語とコーディング方法により， 1つまたは複数のプログラミング言語要素で構成される。

- 「Step」ボタンをクリックすると，デバッガは実行可能な行を1 行実行し，その次に実行可能な行の始めで実行を中断する。この場合， 途中の実行不可能な行はスキップされる。

- 実行可能な行は，コンパイラによって生成された命令の行である( たとえば，ルーチン呼び出し文の行や代入文の行)。メイン・ウィンドウでは， 実行可能な各行の左にボタンが表示される。

- 実行不可能な行には，たとえばコメント行や値を代入しない変数宣言の行がある。 メイン・ウィンドウでは，実行不可能な行の左にはボタンは表示されない。

コンパイル時にコードを最適化した場合，表示されるソース・コードと実際に実行しているコードとが対応しないことがあるので注意してください( 第1.2節を参照)。

## 10.3.4 呼び出されるルーチン内の命令のステップ実行

ルーチン呼び出し文でプログラムの実行が一時停止したときは，「Step」ボタンをクリックすれば， 通常，呼び出されるルーチン内の命令が1ステップ実行されます( そのときのコーディング方法によって異なる)。そしてデバッガは， 呼び出されたルーチン内にはブレークポイントが設定されていないとみなし， 実行を呼び出し元ルーチン内のその次のソース行で中断します。 その結果，呼び出されるルーチン(そのうちのいくつかはシステム・ ルーチンかライブラリ・ルーチンである)を最後までトレースで実行する必要がないので， コードを迅速にステップ実行できます。このことを， 呼び出されるルーチンを1ステップとして実行するといいます。

呼び出されるルーチン内の命令をステップ実行によって1行ずつ実行するには， 次の手順に従ってください。

1. ルーチン呼び出し文で実行を中断する。そのためには，たとえばブレークポイント( 第10.4節を参照)を設定し， プッシュ・ボタン・ビューの「Go」ボタンをクリックする。

2. 呼び出し文で実行が一時停止したら，プッシュ・ボタン・ビューの「S/in 」ボタンをクリックするか，DBG>プロンプトでSTEP/INTO と入力する。その結果，実行は呼び出されたルーチンの先頭を通過する。

呼び出されたルーチン内の命令が実行され始めたら，「Step」ボタンを使用してルーチンを1 行ずつ実行します。

ルーチン呼び出し文で実行が一時停止していないときに「S/in」ボタンをクリックすると， 「Step」ボタンのクリックと同じ働きをします。

## 10.3.5 呼び出されたルーチンからの戻り

呼び出されたルーチン内で実行が中断しているときは，プッシュ・ボタン・ ビューの「S/ret」ボタンをクリックするか，DBG>プロンプトでSTEP/RETURN コマンドを入力することにより，そのルーチンの最後まで直接実行できます。

デバッガは，そのルーチンの戻り命令実行の直前で中断します。その時点で， そのルーチンの呼び出しフレームは呼び出しスタックから削除されていないので， そのルーチンにローカルな変数の値を参照することなどができます。 また次のReturn命令またはCall命令までプログラムを直接実行するときは， プッシュ・ボタンのS/callボタンを使用(またはDBG>プロンプトでSTEP/CALL コマンドを入力)します。

「S/ret」ボタンは，システム・ルーチンやライブラリ・ルーチン内の命令を誤ってステップ実行した場合に特に役立ちます( 第10.1.3項を参照)。

# 10.4 ブレークポイントの設定による実行の中断

ブレークポイントとは，変数の値のチェックやルーチン内の命令のステップ実行などを行うために実行をやめる必要があるプログラム内の記憶位置のことです。

デバッガのDECWindows Motifインタフェースでは，次の各箇所にブレークポイントを設定できます。

- 指定のソース行

- 指定のルーチン(関数，サブプログラムなど)

- プログラムの実行中にシグナル通知される例外

注意
  PointerGrabまたはKeyboardGrab によって，マウス・ポインタを制御しているルーチン内のブレークポイントで停止すると， ワークステーションはハングします。

  この問題を回避するには，2つのワークステーションを使用してプログラムをデバッグします。 詳細については，第9.7.3.1項を参照してください。

デバッガでは次の2種類のブレークポイントを設定できます。

- 条件付きブレークポイント

  指定した関係式の評価が真のときにだけ検出される。

- アクション・ブレークポイント

  このブレークポイントが検出されると，指定したシステム固有コマンドが1 つまたは複数実行される。

条件付きブレークポイントであり同時にアクション・ブレークポイントでもあるブレークポイントを設定できます。

次の各項ではこれらのブレークポイント・オプションについて説明します。

## 10.4.1 ソース行へのブレークポイントの設定

ソース・ディスプレイのソース行のうち，その左にボタンがあるソース行には， ブレークポイントを設定できます。ボタンが表示されている行は， コンパイラが実行可能コードを生成した行(ルーチン宣言，代入文など)です。

ソース行にブレークポイントを設定するには，次の手順に従ってください。

1. ブレークポイントを設定するソース行を検索する(第10.1節を参照)。

2. その行の左にあるボタンをクリックして選択する。ボタンが選択されるとブレークポイントが設定される。 ブレークポイントは，ソース行の先頭， つまりそのソース行に対応する最初の機械語コード命令に設定される。

図 10-4では，37行目の先頭にブレークポイントが設定されている。

### 図 10-4 ソース行へのブレークポイントの設定

## 10.4.2 ソース・ブラウザによるルーチン上のブレークポイントの設定

ルーチンにブレークポイントを設定すれば，そのルーチンまで直接実行を進めてそのローカル環境を検査することができます。

ルーチンにブレークポイントを設定するには，次の手順に従ってください。

1. メイン・ウィンドウの「File」メニューで「Browse Sources...」を選択する(図 10-2 を参照) 。「Source Browser」ダイアログ・ボックスに，実行可能なイメージおよびこれとリンクされたすべての共用可能イメージ( たとえば， DEBUGおよびLIBRTL)の名前が表示される。実行可能なイメージは強調表示される。 このイメージにシンボリック情報がない場合，リンクされたイメージの名前が薄く表示される。

2. 実行可能なイメージの名前をダブル・クリックする。そのイメージ名の下にインデントされて， そのイメージ内の各モジュールの名前が表示される。

3. 表示したいモジュールの名前をダブル・クリックする。モジュール名の下に， そのモジュール内のルーチンの名前が(インデント付きで) 表示される(図 10-5を参照) 。

4. ブレークポイントを設定するルーチンの名前をクリックする。 Set Breakpointコマンドの結果が，コマンド・ビューのコマンド行にエコーバックされる。

   また別の方法として，ルーチン名をクリックした後，「Source Browser」ビューの「Set Breakpoint」ボタンをクリックする方法もある。 この場合も，Set Breakpointコマンドの結果が，コマンド・ ビューのコマンド行にエコーバックされる。

### 図 10-5 ルーチンへのブレークポイントの設定

## 10.4.3 例外ブレークポイントの設定

例外ブレークポイントを設定すると，例外がシグナル通知されたとき， ユーザ・プログラムによって宣言された例外ハンドラが実行される前に実行が中断されます。 したがって例外ハンドラが使用できる場合は， その中の命令をステップ実行することにより，制御の流れをチェックできます。

例外ブレークポイントを設定するには，メイン・ウィンドウまたはオプション・ ビュー・ウィンドウの「Break」メニューから「On Exception」を選択します。 例外がシグナル通知されるたびに例外ブレークポイントが検出されます。

## 10.4.4 現在設定されているブレークポイントの識別

現在設定されているブレークポイントを次の3つの方法で知ることができます。

- ブレークポイント・ボタンが塗りつぶされている行に注意しながら， ソース・コードをスクロールする。この方法では時間がかかり， しかも一度設定されたあとに無効にされたブレークポイントは表示されない( を参照)。

- メイン・ウィンドウまたはオプション・ビュー・ウィンドウの「Options 」メニューで「Views...」を選択する。「Views」ダイアログ・ ボックスが表示されたら，「Breakpoint View」をクリックしてブレークポイント・ ビューを表示する(図 8-4を参照)。

  ブレークポイント・ビューには，各ブレークポイントのモジュール名と行番号の一覧が表示される( 第10.1 節を参照)。表示された各ブレークポイントの隣にある塗りつぶされたボタンは， そのブレークポイントが有効なことを示す。塗りつぶされていないボタンは， そのブレークポイントが無効なことを示す。

- コマンド・ビューのDGB>プロンプトでSHOW BREAKコマンドを入力する。 デバッガには，現在設定されているすべてのブレークポイントがリストされ， 条件ブレークポイントの場合のトリガ条件やアクション・ ブレークポイントの場合に実行されるコマンドもあわせて表示される。

ブレークポイントを設定すると，無効化，有効化または削除を行うことができます。

無効にしたブレークポイントは，プログラムの実行中はデバッガによって無視されます。 しかし，そのブレークポイントはブレークポイント・ビューに表示されているので， あとで，たとえばプログラムの再実行時などに有効にできます( 第9.3節を参照)。次の点に注意してください。

- 特定のブレークポイントを無効にするには，メイン・ウィンドウ内かブレークポイント・ ビュー内のそのブレークポイントのボタンをクリアする。

  すべてのブレークポイントを無効にするには，「Break」メニューで「Deactivate All Breaks 」を選択する。

- ブレークポイント・ビューの場合，ブレークポイントが現在有効であれば， 「Break」メニューの「Toggle」を選択することもできる。

あるブレークポイントを有効にすれば，そのブレークポイントはプログラムの実行中有効になります。

- あるブレークポイントを有効にするには，メイン・ウィンドウ内かブレークポイント・ ビュー内のそのブレークポイントのボタンを選択して塗りつぶす。

  ブレークポイント・ビューの場合，ブレークポイントが現在無効であれば， 「Break」メニューの「Toggle」を選択することもできる。

- すべてのブレークポイントを有効にするには，「Break」メニューで「Activate All 」を選択する。

あるブレークポイントを取り消すと，そのブレークポイントはブレークポイント・ ビューに表示されなくなり，あとでビューを使用して有効にできなくなります。 第10.4.1項と第10.4.2項の説明に従ってブレークポイントを再設定する必要があります。 次の点に注意してください。

- 特定のブレークポイントを削除するには，オプション・ビュー・ ウィンドウの「Break」メニューで「Cancel」を選択する。

- すべてのブレークポイントを削除するには，「Break」メニューの中から「Cancel All 」を選択する。

## 10.4.5 条件付きブレークポイントの設定

条件付きブレークポイントで実行が中断されるのは，指定された式の評価が真のときだけです。 たとえば，プログラム内のある変数の値が4のときにブレークポイントが有効になるように指定することができます。 その変数の値が4 でなければ，そのブレークポイントは無視されます。

プログラムの実行中にブレークポイントが検出されると，条件式が評価されます。

次の手順により，条件付きブレークポイントが設定されます。その場合， 以前同じ場所にブレークポイントが設定されていたかどうかは関係ありません。

1. 条件付きブレークポイントの設定先のソース行を表示する(第10.1節を参照)。

2. 次のいずれかを実行する。

   - ソース行の左にあるボタン上でCtrl/MB1を押す。「Set /Modify Breakpoi nt」ダイアログ・ボックスが表示され，選択されているソース行が「Location: 」フィールドに表示される(図 10-6 を参照)。

   - 「Break」メニューから「Set」または「Set/Modify」を選択する。 「Set/Modify Breakpoint」ダイアログ・ボックスが表示されたら， 「Location :」フィールドにソース行を入力する。

3. ダイアログ・ボックスの「Condition:」フィールドに関係式を入力する。 その関係式は，ソース言語で有効なものでなければならない。 たとえば，a[3] == 0はC言語で有効な関係式である。

4. 「OK」をクリックする。条件付きブレークポイントが設定される。 ブレークポイントのボタンの形が四角からダイヤに変わり，ブレークポイントが条件付きであることが示される。

### 図 10-6 条件付きブレークポイントの設定

条件付きブレークポイントを変更するには，次の手順に従ってください。 この手順で，既存の条件付きブレークポイントの位置や割り当てた条件を変更したり， 無条件ブレークポイントを条件付きブレークポイントに変更することができます。

1. メイン・ウィンドウまたはオプション・ビュー・ウィンドウの「Options 」メニューで「Views...」を選択する。「Views」ダイアログ・ ボックスが表示されたら，「Breakpoint View」をクリックしてブレークポイント・ ビューを表示する。

2. ブレークポイント・ビューで次のいずれかを実行する。

   - 表示されているブレークポイントの左にあるボタン上でCtrl/MB1 を押す。

   - ビューに表示されているブレークポイントをクリックしてから「Break 」メニューで「Set/Modify」を選択する。

3. 前の手順の3と4を実行し，適切な設定を行う。

## 10.4.6 アクション・ブレークポイントの設定

アクション・ブレークポイントが検出されると，実行は中断され，指定したコマンドの並びが実行されます。

アクション・ブレークポイントを設定するには，次の手順に従ってください。 以前に同じ場所にブレークポイントが設定されていたかどうかは関係ありません。

1. アクション・ブレークポイントの設定先のソース行を表示する( 第10.1節を参照)。

2. 次のいずれかを実行する。

   - ソース行の左にあるボタン上でCtrl/MB1を押す。「Set /Modify Breakpoi nt」ダイアログ・ボックスが表示され，選択されているソース行が「Location: 」フィールドに表示される(図 10-6 を参照)。

   - 「Break」メニューで「Set」または「Set/Modify」を選択する。 「Set/Modify Breakpoint」ダイアログ・ボックスが表示されたら， 「Location:」フィールドにソース行を入力する。

3. ダイアログ・ボックスの「Action:」フィールドに1つまたは複数のデバッガ・ コマンドを入力する。たとえば，DEPOSIT x[j] = 3; STEP; EXAMINE aと入力する。

4. 「OK」をクリックする。アクション・ブレークポイントが設定される( 図 10-7を参照)。

### 図 10-7 アクション・ブレークポイントの設定

アクション・ブレークポイントを変更するには，次の手順に従ってください。 この手順で，既存のアクション・ブレークポイントの位置や割り当てた条件を変更したり， 無条件ブレークポイントをアクション・ブレークポイントに変更することができます。

1. メイン・ウィンドウまたはオプション・ビュー・ウィンドウの「Options 」メニューで「Views...」を選択し，「Views」ダイアログ・ ボックスが表示されたら，「Breakpoint View」をクリックする。

2. ブレークポイント・ビューで次のいずれかを実行する。

   - 表示されているブレークポイントの左にあるボタン上でCtrl/MB1 を押す。

   - ビューに表示されているブレークポイントをクリックしてから「Break 」メニューで「Set/Modify」を選択する。

3. 前の手順の3と4を実行し，適切な設定を行う。

# 10.5 変数の検査と操作

この節では，次の操作方法について説明します。

- ウィンドウでの変数名の選択

- 変数の値の表示

- 変数のモニタ

- 変数のウォッチ

- 変数の値の変更

変数の操作全般については，第10.6節も参照してください。

## 10.5.1 ウィンドウでの変数名の選択

次の各項の操作では，次の方法でウィンドウから変数を選択します。例を 第10.5.2項に示します。

名前を選択するときは，ソース・プログラミング言語の構文に従います。

- スカラ(非集合体)変数，たとえば整数型，実数型，論理型，または列挙型の変数を指定するには， その変数の名前を選択する。

- 集合体全体，たとえば配列や構造体(レコード)を指定するには， その変数の名前を選択する。

- 集合体変数の要素を指定するには，その言語の構文を使用してその要素を選択する。 たとえば，次のとおりです。

  - 文字列arr2[7]は，C言語の配列arr2の要素7を指定する。

  - 文字列employee.addressは，Pascal言語のレコード(構造体) employee の構成要素addressを指定する。

- ポインタ変数が示すオブジェクトを指定するには，その言語の構文に従ってその要素を選択する。 たとえばC言語では，文字列*int_ pointは，ポインタint_pointによって示されるオブジェクトを指定する。

ウィンドウ内の文字列は次のようにして選択します。

- どのウィンドウの場合も，ブランクで区切られている文字列を選択するには，DECWindows Motif の標準の単語選択方法(目的の文字列にポインタを位置づけてMB1 をダブル・クリックする)を使用する。

- どのウィンドウの場合も，任意の文字列を選択するには， DECWindows Motifの標準のテキスト選択方法(1文字目にポインタを位置づけ，MB1 を押したままそのポインタを文字列の最後までドラッグし，MB1 を離す)を使用する。

- デバッガのソース・ディスプレイの場合，言語依存のテキスト選択を行うこともできる。 言語依存識別子の境界で区切られた文字列を選択するには， ポインタをその文字列に位置づけ，Ctrl/MB1を押す。

  たとえば，ソース表示に文字列arr2[m]が含まれている場合は，次のようにする。

  - arr2を選択するには，ポインタをarr2に位置づけ，Ctrl /MB1を押す。

  - mを選択するには，ポインタをmに位置づけ，Ctrl/MB1を押す。

  言語依存のテキスト選択のキー順序は，第10.10.4.2項の説明に従って変更できる。

## 10.5.2 変数の現在値の表示

変数の現在値を表示するには，次の手順に従います。

1. 第10.5.1項の説明に従って， ウィンドウ内の変数名を検索し， 選択する。

2. プッシュ・ボタン・ビューの「EX」ボタンをクリックする。コマンド・ ビューに変数とその現在値が表示される。この値は現在の有効範囲内の変数の値であり， ユーザが変数を選択したソース記憶位置の値ではない。

図 10_8，図 10-9 ，および図 10-10に整変数， 配列集合体，および配列要素の表示方法をそれぞれ示します。

### 図 10-8 整変数の値の表示

### 図 10-9 配列集合体の値の表示

### 図 10-10 配列集合体の値の表示

現在値を別の型や基数で表示するには，次の手順に従ってください。

1. 第10.5.1項の説明に従って， ウィンドウ内で変数名を検索して選択する。

2. メイン・ウィンドウの「Command」メニューで「Examine...」を選択する。 「Examine」ダイアログ・ボックスが表示され，選択されている変数名が「Variable/Expression 」フィールドに表示される。

3. ダイアログ・ボックス内の「Typecast」メニューで「default 」，「int」，「long」，「quad」，「short」，または「char* 」のいずれかを選択する。

4. ダイアログ・ボックス内の「Output Radix」メニューで「default 」，「he x」，「octal」，「decimal」，または「binary」のいずれかを選択する。

5. 「OK」をクリックする。

指定に応じて変更された値がコマンド・ビューに表示されます。

図 10-11では，変数jがlongに型キャストされています。

### 図 10-11 変数値の型キャスト

## 10.5.3 変数の現在値の変更

変数の現在値を変更するには，次の手順に従ってください。

- 第10.5.1項の説明に従って， ウィンドウ内で変数名を検索して選択する。

- メイン・ウィンドウの「Command」メニューで「Deposit...」を選択する。 「Deposit」ダイアログ・ボックスが表示され，選択されている変数名が「Variable 」フィールドに表示される。

- 「Value」フィールドに新しい値を入力する。

- ダイアログ・ボックス内の「Input Radix」メニューで「default 」，「hex」，「octal」，「decimal」,「binary」のいずれかを選択する。

- 「OK」をクリックする。

指定に応じた新しい値がコマンド・ビューに表示され，変数に代入されます。

図 10-12では，変数safeの値を変更しています。

### 図 10-12 変数値の変更

## 10.5.4 変数のモニタ

変数をモニタする場合，デバッガはその値をモニタ・ビューに表示します。 また，たとえば，ステップのあとやブレークポイントでプログラムからデバッガに制御が戻ると， 表示されている値をチェックし，更新します。

注意
  モニタできるのは，変数と， 配列や構造体(レコード)などの集合体だけです。複合式やメモリ・アドレスはモニタできません。

変数をモニタするには，次の手順に従ってください(図 10-13 を参照)。

1. 第10.5.1項の説明に従って， ウィンドウ内で変数名を検索し， 選択する。

2. プッシュ・ボタン・ビューの「MON」ボタンをクリックする。 デバッガは次の表示を行う。

   - モニタ・ビューを表示する(まだ表示されていない場合)。

   - 選択された変数の名前とその修飾パス名を「Monitor Expression」欄に表示する。

   - その変数の値を「Value/Deposit」欄に表示する。

   - 塗りつぶされていないボタンを「Watched」欄に表示する( 第10.5.5項を参照)。

変数をモニタしているときに出力値を型キャストするには，「Monitor」メニューで「Typecast 」を選択します。

モニタ中の変数の出力の基数は次の方法で変更できます。

- モニタ中の選択された要素の出力の基数を変更するには， 「Monitor」メニューで「Change Radix」を選択する。

- これ以降モニタするすべての要素の出力の基数を変更するには， 「Monitor」メニューで「Change All Radix」を選択する。

モニタしている要素をモニタ・ビューから削除するには，「Monitor」メニューで「Remove 」を選択します。

### 図 10-13 変数のモニタ

### 10.5.4.1 集合体(配列または構造体)変数のモニタ

配列や構造体(レコード)などの集合体変数の名前を選択し，「MON」ボタンをクリックすると， モニタ・ビューの「Value/Deposit」欄に Aggregateという語が表示されます。集合体変数のすべての要素( 構成要素)の値を表示するには，「Monitor Expression」欄の変数名をダブル・ クリックするか，または「Monitor」メニューで「Expand」を選択します。 各要素の名前は，親の名前よりインデントされて表示されます( 図 10-14を参照)。 ある要素が集合体の場合， その名前をダブル・クリックすればさらにその要素も表示されます。

### 図 10-14 モニタ・ビューに展開された集合体変数( 配列)

拡大された表示を元に戻して，集合体の親の名前だけをモニタ・ビューに表示するには， 「Monitor Expression」欄の変数名をダブル・クリックするか， または「Monit or」メニューで「Collaspe」を選択します。

集合体変数の構成要素を選択した場合，その構成要素式自身が変数であれば， 選択時にアクティブだった構成要素がモニタされます。たとえば，配列構成要素arr[i] を選択した場合，iの現在値が9であれば，たとえiの値があとで10 に変わっても，arr[9]がモニタされます。

### 10.5.4.2 ポインタ(アクセス)変数のモニタ

ポインタ(アクセス)変数の名前を選択し「MON」ボタンをクリックすると， 参照されたオブジェクトのアドレスがモニタ・ビューの「Value /Deposit」欄に表示されます(図 10-15 の最初のエントリを参照)。

参照されたオブジェクト値をモニタする(ポインタ変数を間接参照する) には，「Monitor Expression」欄のポインタ名をダブル・クリックします。 この結果，モニタ・ビューではそのポインタ変数のエントリの下に， 参照されたオブジェクトエントリがインデントされて表示されます(図 10-15 の一番下のエントリを参照) 。参照されたオブジェクトが集合体の場合，その名前をダブル・クリックすればさらにその要素も表示されます。

### 図 10-15 モニタ・ビューでのポインタ変数と参照されたオブジェクト

## 10.5.5 変数のウォッチ

ウォッチされている変数の値がプログラムで変更されると，実行が中断しコマンド・ ビューにその新旧の値が表示されます。

変数をウォッチする(変数へのウォッチポイントの設定)には，次の手順に従ってください。

- 第10.5.4項の説明に従って変数をモニタする。 変数をモニタするたびに，モニタ・ビューの「Watched 」欄にボタンが1つ表示される(図 10-16 を参照)。

- 「Watched」欄のボタンをクリックする。ボタンが塗りつぶされて， ウォッチポイントの設定が示される。

### 図 10-16 モニタ・ビューでの変数のウォッチ

ウォッチポイントを無効にするには，モニタ・ビューの「Watched」ボタンをクリックしてクリアするか， または「Monitor」メニューで「Toggle Watchpoin t」を選択します。ウォッチポイントを有効にするには，目的の「Watched 」ボタンをクリックして塗りつぶすか，または「Monitor」メニューで「Toggle Watchpoin t 」を選択します。

静的変数と非静的(自動)変数，およびこれらの変数へのアクセス方法については， 第10.6.1項を参照してください。 変数の定義元ルーチンから実行の制御が移る(戻る)と，非静的ウォッチポイントは無効になります。 非静的変数がアクティブでなくなると，モニタ・ ビューではそのエントリが薄く表示され，その「Watched」ボタンはクリアされます。

変数の定義元ルーチンに実行の制御が後で戻る場合，非静的ウォッチポイントが自動的に再び有効になることはありません。 非静的ウォッチポイントは， ユーザが自分で明示的に，有効にしなければなりません。

## 10.5.6 モニタされたスカラ型変数の値の変更

スカラ(非集合体)型変数，たとえば整数型や論理型の値を変更するには， 次の手順に従ってください(図 10-17 を参照)。

1. 第10.5.4項の説明に従って変数をモニタする。

2. モニタ・ビューの「Value/Deposit」欄の変数値をクリックする。 その値の上に小さな編集可能ダイアログ・ボックスが表示される。

3. そのダイアログ・ボックスに新しい値を入力する。

4. そのダイアログ・ボックスのチェック・マーク(OK)をクリックする。 ダイアログ・ボックスが消えて新しい値が表示され，変数がその値になったことが示される。 その変数の型，範囲などに合わない値を入力しようとすると注意が表示される。

### 図 10-17 モニタされたスカラ型変数の値の変更

値の入力を中止してダイアログ・ボックスを消すには，X (取り消し)をクリックします。

集合体型変数(たとえば配列や構造体)は一度に1つの構成要素の値を変更できます。 集合体型変数の構成要素の値を変更するには，次の手順に従ってください( 図 10-18を参照)。

1. 第10.5.4.1項の説明に従って構成要素の値を表示する。

2. スカラ型変数の値の変更手順に従う。

### 図 10-18 集合体型変数の構成要素の値の変更

# 10.6 プログラム変数へのアクセス

この節では，デバッグ時にプログラム変数にアクセスするときの一般的な関連事項について説明します。

コンパイル時にプログラムを最適化すると，デバッグ時に特定の変数にアクセスできなくなります。 デバッグ対象のプログラムをコンパイルするときは， できるだけ最適化しないようにしてください(を参照)。(第1.2節を参照)。

変数の値をチェックする前に，その変数が宣言され初期化される箇所の先まで必ずそのプログラムを実行します。 初期化されていない変数内の値は， 不当であると考えられます。

## 10.6.1 静的変数と非静的(自動)変数へのアクセス

注意
  ここでは総称して「非静的変数」という用語を使用しますが， 言語によっては自動変数と呼ぶ場合もあります。

静的変数には，プログラムの実行中は同じメモリ・アドレスが割り当てられます。 静的変数にはいつでもアクセスできます。

非静的変数はスタックかレジスタに割り当てられ，その定義元ルーチンかブロックが呼び出しスタック上でアクティブな場合にだけ値を持ちます。 したがって，非静的変数にアクセスできるのは，その定義元ルーチンかブロック( 定義元ルーチンから呼び出されたルーチンを含む)の有効範囲内でプログラムの実行が一時停止しているときだけです。

通常，非静的変数にアクセスするには，定義元にまずブレークポイントを設定してから， そのブレークポイントまでプログラムを実行します。

ユーザ・プログラムの実行によって非静的変数がアクセスできなくなると， 次のような通知がなされます。

- 変数の値を表示または変数をモニタしようとしている場合は， それぞれ第10.5.2項と第10.5.4項の説明のように， その変数がアクティブでないまたは有効範囲にないというメッセージが発行される。

- 変数(または変数を含む式)をモニタしている場合は，モニタ・ ビュー内のそのエントリが薄く表示される。エントリが薄く表示されていると， その変数の表示値はチェックも更新もされない。また，第10.5.3項のように， その値を変更することもできない。 そのエントリは，その変数が再びアクセス可能になれば普通に表示される。

- 変数をウォッチしている場合は(第10.5.5 項を参照)，そのウォッチポイントは無効になり(そのウォッチ・ ボタンはクリアされる)，そのエントリは薄く表示される。ただし， その変数が再びアクセス可能になっても，そのウォッチポイントは自動的には再度有効にならないことに注意。

## 10.6.2 呼び出しスタックを基準とする現在の有効範囲の設定

プログラム内のルーチンをデバッグしているときに，現在の有効範囲を呼び出し元ルーチン( スタックで，現在実行が一時停止しているルーチンより下にあるルーチン) に設定することができます。これにより，次のことが可能になります。

- 現在のルーチン呼び出しの開始位置を明らかにする。

- 呼び出し元ルーチンで宣言されている変数の値を明らかにする。

- 再帰呼び出しされるルーチンの特定の起動時に変数の値を明らかにする。

- ルーチン呼び出しの場合の変数の値を変更する。

メイン・ウィンドウの「Call Stack」メニューには，スタックで現在アクティブなプログラム・ ルーチン(および，特定の条件下でのイメージとモジュール) の名前が，画面に表示できる最大行数まで一覧表示されます(図 10-19 を参照)。メニューの左側の番号は， 実行が一時停止しているルーチンをレベル0としたときのスタックの各ルーチンのレベルです。

現在の有効範囲をスタックの特定のルーチンに設定するには，「Call Stack」メニュー(図 10-19を参照) 。からその名前を選択します。すると，次の処理が行われます。

- 「Call Stack」メニューには，現在の有効範囲であるルーチンの名前と相対レベルが表示される。

- メイン・ウィンドウには，そのルーチンのソース・コードが表示される。

- 命令ビューには，そのルーチンのデコード済み命令が表示される。

- レジスタ・ビューには，そのルーチン呼び出しに対応したレジスタ値が表示される。

- 有効範囲を呼び出し元ルーチン(0以外の呼び出しスタック・ レベル)に設定すると，現在位置ポインタは図 10-19 のように白抜きになる。

- シンボル検索の有効範囲は選択されたルーチンに設定されるので， その有効範囲内で変数を検査することなどができる。

### 図 10-19 現在の有効範囲を呼び出し元ルーチンに設定する

有効範囲をある呼び出し元ルーチンに設定すると，その呼び出し元ルーチンに実行制御が戻ったときに実行されるソース行が， 白抜きの現在位置ポインタによって示されます。 ソース言語やコーディング方法により，呼び出し文を含んでいる行が示されたり， それ以降の行が示されることもあります。

## 10.6.3 変数やその他のシンボルの検索方法

シンボルがあいまいになるのは，シンボル(たとえば，変数名X)を2つ以上のルーチンに定義するとき， つまりその他のプログラム・ユニットに定義するときです。

ほとんどの場合，シンボルのあいまいさは自動的に解消されます。まず， 現在設定されている言語の有効範囲と可視性の規則が使用されます。また， デバッガではブレークポイントを設定するためなどに任意のモジュール内にシンボルを指定できるので， 呼び出しスタック上のルーチン呼び出しの順序によってシンボルのあいまいさが解消されます。

しかし，複数回定義されたシンボルを指定すると，次のような処置がとられることがあります。

- ユーザの意図するシンボルの特定の宣言をデバッガが決められず，"symbol not unique" メッセージが発行される。

- 現在の有効範囲内で可視のシンボル宣言があれば，ユーザの意図するものでなくてもそれが参照される。

これらの問題を解決するためには，目的のシンボル宣言の検索範囲を指定しなければなりません。

- 呼び出しスタック内で現在アクティブな複数のルーチン内にシンボルのさまざまな宣言がある場合は， メイン・ウィンドウの「Call Stack 」メニューを使用して現在の有効範囲を再設定する(第10.6.2項を参照)。

- それ以外の場合は，シンボルの前にパス名を指定して，適切なコマンド(EXAMINE やMONITORなど)をコマンド・プロンプトで入力する。 たとえば，変数XをCOUNTERとSWAPという2つのモジュールに定義している場合， 次のコマンドを使用すればパス名SWAP\XによってSWAPモジュール内のX の宣言を指定できる。

           DBG> EXAMINE SWAP\X

# 10.7 レジスタに格納されている値の表示と変更

レジスタ・ビューには，すべての機械語レジスタの現在の内容が表示されます( 図 10-20を参照)。

レジスタ・ビューを表示するには，メイン・ウィンドウまたはオプション・ ビュー・ウィンドウの「Options」メニューで「Views...」を選択し， 「Views」ダイアログ・ボックスが表示されたら，「Registers」をクリックします。

省略時の設定では，レジスタ・ビューには現在実行が一時停止しているルーチンに対応するレジスタ値が自動的に表示されます。 プログラムからデバッガに制御が戻ると， プログラムの実行で変更されたすべての値が強調表示されます。

呼び出しスタック内の任意のルーチンに対応するレジスタ値を表示するには， メイン・ウィンドウの「Call Stack」メニューでその名前を選択します( 第10.6.2項を参照)。

レジスタに格納されている値を変更するには，次の手順に従ってください。

1. レジスタ・ビュー内のレジスタ値をクリックする。小さな編集可能ダイアログ・ ボックスが現在値の上に表示される。

2. そのダイアログ・ボックスに新しい値を入力する。

3. ダイアログ・ボックス内のチェック・マーク(OK)をクリックする。 ダイアログ・ボックスが消えて新しい値が表示され，その値がレジスタに入ったことが示される。 レジスタの値を変更せずにダイアログ・ ボックスを消去するときは，X (Cancel)をクリックする。

レジスタ値の表示に使用する基数は，次の方法で変更できます。

- 選択されたレジスタの現在の出力とそれ以降の出力の基数を変更するには， 「Register」メニューで「Change Radix」を選択する。

- すべてのレジスタの現在の出力とそれ以降の出力の基数を変更するには， 「Register」メニューで「Change All Radix」を選択する。

### 図 10-20 レジスタ・ビュー

# 10.8 ユーザ・プログラムのデコード済み命令ストリームの表示

命令ビューには，ユーザ・プログラムのデコード済み命令ストリーム， つまり実際に実行されているコード(図 10-21 を参照)が表示されます。命令ビューが役立つのは，コンパイラによって最適化されたプログラムのデバッグ中は， メイン・ウィンドウの情報が実行中のコードと正確に対応していない場合です( 第1.2節を参照)。

命令ビューを表示するには，メイン・ウィンドウまたはオプション・ ビュー・ウィンドウの「Options」メニューで「Views...」を選択し， 「Views」ダイアログ・ボックスが表示されたら，「Instructions」をクリックします。

省略時の設定では，命令ビューには現在実行が一時停止しているルーチンのデコード済み命令ストリームが自動的に表示されます。 命令の左にある現在位置ポインタは， 次の実行命令を示します。

省略時の設定では，命令に対応するソース・コードの行番号が命令の左に表示されます。 行番号を表示するか表示しないか指定するには，命令ビューの「File 」メニューで「Display Line Numbers」を選択します。

省略時の設定では，命令の左にメモリ・アドレスが表示されます。アドレスを表示するか表示しないか指定するには， 命令ビューの「File」メニューで「Show Instruction Addresses 」を選択します。

命令ビューでの操作が終了したら，「Call Stack」メニューをクリックして， 実行の停止箇所を再表示できます。

呼び出しスタック内のルーチンの命令ストリームを表示するには，メイン・ ウィンドウの「Call Stack」メニューでそのルーチンの名前を選択します( 第10.6.2項を参照)。

### 図 10-21 命令ビュー

# 10.9 タスキング・プログラムのデバッグ

タスキング・プログラムは1つのプロセス内に複数の実行スレッドを持っており， 次のプログラムを含んでいます。

- DECthreadsかPOSIX 1003.1bサービスを使用する言語で書かれたプログラム。

- 言語固有のタスキング・サービス(その言語が直接用意しているサービス) を使用するプログラム。現在のところ，デバッガがサポートする組み込みタスキング・ サービスを用意している言語はAdaだけである。

デバッガで使用するタスクという用語はこのような制御の流れを示すものであり， 言語や実現方法とは関係ありません。デバッガのタスキング・ サポートは，このようなプログラムすべてに適用されます。

デバッガを使用すれば，タスクの情報を表示したり，タスクの実行，優先順位， 状態の遷移などを制御するタスク特性を変更したりできます。

次の各節ではデバッガのDECWindows Motifインタフェースのタスキング機能を要約します。 デバッガのタスキング・サポートについての詳しい説明は， 第17章を参照してください。

## 10.9.1 タスク情報の表示

プログラムのタスク情報を表示するには，メイン・ウィンドウまたはオプション・ ビュー・ウィンドウの「Options」メニューで「Views...」を選択し， 「Views」ダイアログ・ボックスが表示されたら，「Tasking」をクリックします。

このタスキング・ビューには，ユーザ・プログラム内に現在存在している( 終了していない)すべてのタスクの情報が表示されます。プログラムからデバッガに制御が戻ると， タスク情報が更新されます(図 10-22 を参照)。

### 図 10-22 タスキング・ビュー

次の各情報が表示されます。

- タスクID。左欄の矢印は，アクティブ・タスク，つまり「Go」ボタンか「Step 」ボタンのクリック時に実行されるタスクを示す。

- タスク優先順位。

- タスクが保留されているかどうか(第10.9.2項を参照)。

- タスクの現在の状態。「RUN」状態(実行中)のタスクがアクティブ・ タスクである。

- タスクの現在の副次状態。タスクが現在の状態になった原因を示す。

- タスク(スレッド)オブジェクトのデバッガ・パス名。デバッガがタスク・ オブジェクトをシンボル化できない場合はタスク・オブジェクトのアドレス。

## 10.9.2 タスク特性の変更

デバッグ中にタスクの特性やタスキング環境を変更するには，「Task」メニューで次のいずれかの項目を選択します。

「Tasks」メニューの項目 | 機能
--- | ---
Abort | 選択されたタスクを次に終了可能なときに終了するように要求する。 実際にどのように実行されるかは， 現在のイベント・ファシリティにより異なる(言語固有)。Adaのタスクの場合， 強制終了文の実行と同じである。
Activate | 選択されたタスクをアクティブ・タスクにする。
Hold | 選択されたタスクを保留にする。
Nohold | 選択されたタスクの保留を解除する。
Make Visible | 選択されたタスクを可視タスクにする。
All | サブメニューを使用してすべてのタスクを強制終了したり， すべてのタスクの保留を解除する。

# 10.10 デバッガのDECwindows Motifインタフェースのカスタマイズ

デバッガは，省略時のデバッガ・リソース・ファイル(DECW$SYSTEM_ DEFAULTS:VMSDEBUG.DAT)と一緒にシステムにインストールされます。このリソース・ ファイルでは，次のようなカスタマイズ可能なパラメータで， 省略時の起動設定を定義します。

- ウィンドウとビューの構成

- メイン・ウィンドウの行番号を表示するか表示しないかの指定

- ボタン名および対応するデバッガ・コマンド

- 条件付きブレークポイントとアクション・ブレークポイントのダイアログ・ ボックスを表示するキー・シーケンス

- ソース・ビューと命令ビューにおける，テキストの言語依存の選択用キー・ シーケンス

- ビューのテキストの文字フォント

- 各ウィンドウとビューに表示されるテキスト用の文字フォント

- ソース・ビュー，命令ビュー，エディタ・ビューにおける，テキストの前景色と背景色

- メイン・ウィンドウ・タイトル・バー上の，プログラム，モジュール， ルーチン名の表示

- デバッガを終了する前に確認が出るようにするかどうかの設定

説明用のコメントを入れた，システムの省略時デバッガ・リソース・ ファイルは，例 10-1に掲載されています。 これらの表示属性のうち，最初の3つの事項については， 第10.10.1項，第10.10.2項， および第10.10.3項で説明する方法でDECWindows Motif インタフェースにより会話形式で制御できます。どの場合も， 「Options」メニューで「Save Options」を選択することにより， 変更した表示構成を保存し，これ以降のデバッグ・セッションで適用することができます。

また，第10.10.4項の説明に従って， デバッガ・リソース・ファイルを編集し保存することにより，デバッガの表示構成についてのすべての属性を変更することができます。 「Options」メニューから「Save Options」を選択するとき，またはローカル・ デバッガ・リソース・ファイルの編集と保存を行うとき，デバッガは新しいバージョンのローカル・ デバッガ・リソース・ファイルDECW$USER_DEFAULTS:VMSDEBUG.DAT を作成します。このファイルには，表示構成属性の定義が含まれています。 次にデバッガを起動するとき，もっとも新しいローカル・ リソース・ファイルで定義されている属性が使用され， それによって出力表示が構成されます。DCLコマンドのDELETE， RENAME，COPYを適切に使用することにより，デバッガの以前の表示構成に戻すことができます。

システムの省略時表示構成に戻すときは，OpenVMSデバッガの「Options」メニューから「Restore Default Options 」を選択します。

## 10.10.1 デバッガ・ビューの起動時構成の定義

デバッガのビューの起動時構成を定義するには，次の手順に従ってください。

1. デバッガの使用中に，ビューの構成を希望どおりに設定する。

2. 「Options」メニューで「Save Options」を選択することにより， デバッガ・リソース・ファイルの新バージョンが作成される。

次にデバッガを起動すると，新しい表示構成を作成するときに最新のリソース・ ファイルが使用されるようになります。

リソース・ファイル内にあるこれらのビューの定義を編集することによって( 第10.10.4項を参照)， 起動時の表示構成を定義することもできます。

## 10.10.2 ソース・ビューと命令ビュー内の行番号の表示と非表示

デバッガの起動時，省略時の設定により，ソース・ビューと命令ビューにはソース行番号が表示されます。 デバッガの起動時に行番号を表示しないようにするには， 次の手順に従ってください。

1. デバッガの使用中に，メイン・ウィンドウ(または命令ウィンドウ) の「File」メニューで「Display Line Numbers」を選択する。そのメニュー項目の横のボタンが白抜きになり， 行番号が表示されなくなる。

2. 「Options」メニューで「Save Options」を選択し，デバッガのローカル・ リソース・ファイルの新バージョンを作成する。

次にデバッガを起動すると，最新のリソース・ファイルが使用されて，新しい表示構成が作成されます。

リソース・ファイル内の次のリソースを「True」か「False」に設定することによって( 第10.10.4項を参照) ，起動時に行番号を表示するかどうかの省略時設定を決めることもできます。

         DebugSource.StartupShowSourceLineno: True
         DebugInstruction.StartupShowInstLineno: True

## 10.10.3 プッシュ・ボタンの変更，追加， 削除， 並べ替え

プッシュ・ボタン・ビューのボタンはデバッガ・コマンドと対応しています。 ユーザは次の操作ができます。

- ボタンのラベル，またはボタンに対応しているコマンドを変更する。

- 新しいボタンを追加する。

- ボタンを削除する。

- ボタンを並べ替える。

注意
  「Stop」ボタンの変更，削除はできません。

これ以降のデバッガ・セッションで使用できるようにこれらの変更を保存するには， 「Options」メニューで「Save Options」を選択します。

第10.10.3.1項， 第10.10.3.2項， および第10.10.3.3項では， DECwindows Motifインタフェースを使用して会話形式でプッシュ・ボタンをカスタマイズする方法について説明します。 プッシュ・ボタンをカスタマイズするには， リソース・ファイルを編集する方法もあります。リソース・ ファイルのボタン定義は，次のスクリプトで始まります。

         DebugControl.Button

(例 10-1を参照。)

### 10.10.3.1 ボタンのラベルまたは対応するコマンドの変更

ボタンのラベルまたは対応しているコマンドを変更するには，次の手順に従ってください。

1. メイン・ウィンドウまたはオプション・ビュー・ウィンドウの「Options 」メニューで「Customize Buttons...」を選択する。 「Customize Buttons」ダイアログ・ボックスが表示される(図 10-23 を参照)。

2. 変更したいボタンをダイアログ・ボックスの中でクリックする。 「Command」フィールドと「Label」フィールドにそのボタンのパラメータが表示される。 図 10-23では「STEP」ボタンを選択している。

3. ボタンのアイコンを変更するときは，ダイアログ・ボックスの「Icon 」メニューをプルダウンして，定義済みアイコンを選択する。 図 10-23に示すように， 「Label」フィールドの表示が薄くなり，定義済みアイコンの内部名が表示される。 アイコン自体は，ダイアログ・ボックスのプッシュ・ボタン表示に表示される。

   ボタンのラベルを変更するときは，「Icon」メニューが「None」に設定されていることを確認してから， 「Label」フィールドに新しいラベルを入力する。

4. ボタンに対応しているコマンドも変更するときは， 「Command」フィールドに新しいコマンドを入力する。コマンドのオンライン・ ヘルプについては，第8.4.3 項を参照。

   ウィンドウで選択した名前や言語式にそのコマンドを作用させる場合は， コマンド・パラメータとして%Sを指定する。たとえば，次のコマンドでは現在選択されている言語式の現在値が表示される。

            EVALUATE %s

   デバッガの組み込みシンボル，またはパーセント記号(%)で始まるその他の名前にそのコマンドを作用させる場合は， 次のように2つのパーセント記号を指定する。

            EXAMINE %%NEXTLOC

5. 「Modify」をクリックする。ダイアログ・ボックスのプッシュ・ ボタン表示のボタン・ラベルまたは対応しているコマンドが変更される。

6. 「Apply」をクリックする。デバッガのプッシュ・ボタン・ビューのボタン・ ラベルまたは対応しているコマンドが変更される。

これ以降のデバッガ・セッションで使用できるように変更事項を保存するときは， 「Options」メニューから「Save Options」を選択します。

### 図 10-23 「Step」ボタン・ラベルのアイコンへの変更

### 10.10.3.2 新しいボタンおよび対応するコマンドの追加

プッシュ・ボタン・ビューに新しいボタンを追加し，そのボタンにデバッガ・ コマンドを割り当てるには，次の手順に従ってください。

1. 「Options」メニューで「Customize Buttons...」を選択する。 「Customize Bu ttons」ダイアログ・ボックスが表示される(図 10-24 を参照)。

2. 「Command」フィールドに新しいボタンのデバッガ・コマンドを入力する( 第10.10.3.1 項を参照)。図 10-24では， コマンド「RUN CP:X」を入力している。このコマンドは，X.EXEという名前のプログラムを起動する。

3. 「Label」フィールドにそのボタンのラベルを入力するか， 「Icon」メニューの中から定義済みアイコンを選択する。図 10-24 では，「Run-X」ラベルを入力している。

4. 「Add」をクリックする。新しいボタンがプッシュ・ボタン表示のダイアログ・ ボックスに追加される

5. 「Apply」をクリックする。デバッガのプッシュ・ボタン・ビューにボタンが追加される。

これ以降のデバッガ・セッションで使用できるように変更事項を保存するときは， 「Options」メニューから「Save Options」を選択します。

### 図 10-24 「EXAMINE/ASCIZ」コマンドのボタンの追加

### 10.10.3.3 ボタンの削除

ボタンを削除するには，次の手順に従ってください。

1. メイン・ウィンドウまたはオプション・ビュー・ウィンドウの「Options 」メニューで「Customize Buttons...」を選択する。 「Customize Buttons」ダイアログ・ボックスが表示される。

2. 削除したいボタンをダイアログ・ボックスの中でクリックする。 「Command」フィールドと「Label」フィールドにそのボタンのパラメータが表示される。

3. 「Remove」をクリックする。ダイアログ・ボックスのプッシュ・ ボタン表示からボタンが削除される。

4. 「Apply」をクリックする。デバッガのプッシュ・ボタン・ビューからボタンが削除される。

これ以降のデバッガ・セッションで使用できるように変更事項を保存するときは， 「Options」メニューから「Save Options」を選択します。

### 10.10.3.4 ボタンの並べ替え

ボタンを並べ替えるには，次の手順に従ってください。

1. メイン・ウィンドウまたはオプション・ビュー・ウィンドウの「Options 」メニューで「Customize Buttons...」を選択する。 「Customize Buttons」ダイアログ・ボックスが表示される。

2. 移動したいボタンをダイアログ・ボックスの中でクリックする。 「Command」フィールドと「Label」フィールドにそのボタンのパラメータが表示される。

3. 右または左の矢印をクリックすると，選択したボタンの位置が1 つずつ右または左に移動する。希望の位置に移るまで矢印のクリックを繰り返す。

4. 「Apply」をクリックする。設定した順序でデバッガのプッシュ・ ボタン・ビューにボタンが表示される。

これ以降のデバッガ・セッションで使用できるように変更事項を保存するときは， 「Options」メニューから「Save Options」を選択します。

## 10.10.4 デバッガ・リソース・ファイルの編集

デバッガは，省略時のデバッガ・リソース・ファイル(DECW$SYSTEM_ DEFAULTS:V MSDEBUG.DAT)と一緒にシステムにインストールされます。このリソース・ ファイルでは，デバッガの省略時表示構成を定義します。第10.10節の説明に従って表示属性を変更し， 「Options」メニューの「Save Options」コマンドで変更を保存するとき， デバッガは，ローカル・デバッガ・リソース・ファイルDECW$USER_ DEFAULTS:VMSDEBUG.DATを作成します。このファイルを編集すると，デバッガの表示構成をさらに変更することができます。

ローカル・デバッガ・リソース・ファイルがない場合，「Options」メニューの「Restore Default Options 」項目を選択することにより作成できるようになっています。 最新バージョンのローカル・デバッガ・リソース・ ファイルが1つある場合，デバッガを起動するときはいつでも，デバッガ表示構成がこのファイルで定義されているとおりに作成されます。 それ以外の場合は， システム・デバッガ・リソース・ファイルDECW$SYSTEM_ DEFAULTS:VMSDEBUG.DATの定義が使用されます。

システム・リソース・ファイルは編集することができません。デバッガ表示構成に限り， 第10.10.1 項，第10.10.2項， 第10.10.3項の手順で変更することができます。 またローカル・デバッガ・リソース・ファイルを編集してから保存しても， 表示構成を変更できるようになっています。

例 10-1は，システムの省略時デバッガ・ リソース・ファイルのコピーです。ほとんどのエントリには， ファイル内で注釈が付いているため，その意味が理解できるようになっています。 第10.10.4.1 項，第10.10.4.2 項，第10.10.4.3項， 第10.10.4.4項には， 特定のキー・ シーケンスを変更するときの注意が記載されています。キー・シーケンスの指定についての詳しい説明は， 『X Toolkit Intrinsics』マニュアルの変換テーブルの構文を参照してください。

注意
  例 10-1 に記述されている行のうち， `DebugControl.ButtonList`で始まるものは，この例に完全に合致するものではありません。 この行は，ファイルに含まれているボタン定義を示しています。 ファイル内の行には，StepReturnButton ，StepCallButton，Exami neButton， ExamineASCIZButton，ExamineASCICButton，EvalButton，MonitorBu ttonの各ボタン名も含まれています。

### 例 10-1 システムの省略時デバッガ・リソース・ ファイル(DECW$SYSTEM_DEFAULTS:VMSDEBUG.DAT)

    !
    ! OpenVMS Debug32/64 Debugger Resource File
    !
    DebugVersion: 71
    !
    ! GEOMETRY RESOURCES:
    !
    ! Written when you execute "SAVE OPTIONS" from the Options Menu.
    !
    DebugSource.x:   11
    DebugSource.y:   30
    DebugSource.width:  620
    DebugSource.height:  700
    !
    DebugControl.x:   650
    DebugControl.y:   30
    DebugControl.width:  600
    DebugControl.height:  700

    !
    DebugEditor.x:   650
    DebugEditor.y:   30
    DebugEditor.width:  600
    DebugEditor.height:  700
    !
    DebugInstruction.x:  11
    DebugInstruction.y:  769
    DebugInstruction.width:  620
    DebugInstruction.height: 243
    !
    *DebugBrowser.x:  650
    *DebugBrowser.y:  30
    *DebugBrowser.width:  335
    *DebugBrowser.height:  300

    !
    ! LINE NUMBER DISPLAY RESOURCES:
    !
    !   Create the line or address number display in views at startup?
    !
    DebugSource.StartupShowSourceLineno: True
    DebugInstruction.StartupShowInstLineno: True
    DebugInstruction.StartupShowInstAddrno: False
    !
    ! WINDOW PANE RESOURCES:
    !
    ! Relative size of panes in main window.
    ! Main window height is derived from sum of panes.
    !
    DebugSource*SrcView.height:  460
    DebugSource*PushbuttonPanel.height: 36
    DebugSource*MessageOutputPanel.height: 145

    !
    DebugControl.BreakpointView.height: 175
    DebugControl.MonitorView.height: 150
    DebugControl.TaskView.height:  130
    DebugControl.RegisterView.height: 250

    !
    ! CUSTOM BUTTON RESOURCES:
    !
    ! The following resources determine which buttons to put in the button panel.
    ! Buttons will show in the order they are listed here.
    ! For each button there MUST be a set of associated resources.
    ! EXAMPLE:
    !   ButtonCommand    - Associates a command with the button.
    !   ButtonLegend     - Button Label or pixmap name if pixmap flag is True.
    !   ButtonPixmapFlag - If True uses ButtonLegend as predefined pixmap name.
    !
    DebugControl.ButtonList: \ GoButton, StepButton, StepInButton, ...

    !
    DebugControl.ButtonCommand.GoButton:  go
    DebugControl.ButtonLegend.GoButton:  go_pixmap
    DebugControl.ButtonPixmapFlag.GoButton:  True
    !
    DebugControl.ButtonCommand.StepButton:  step
    DebugControl.ButtonLegend.StepButton:  STEP
    DebugControl.ButtonPixmapFlag.StepButton: False

    !
    DebugControl.ButtonCommand.StepInButton: step/in
    DebugControl.ButtonLegend.StepInButton:  S/in
    DebugControl.ButtonPixmapFlag.StepInButton: False
    !
    DebugControl.ButtonCommand.StepReturnButton: step/return
    DebugControl.ButtonLegend.StepReturnButton: S/ret
    DebugControl.ButtonPixmapFlag.StepReturnButton: False

    !
    DebugControl.ButtonCommand.StepCallButton: step/call
    DebugControl.ButtonLegend.StepCallButton: S/call
    DebugControl.ButtonPixmapFlag.StepCallButton: False
    !
    DebugControl.ButtonCommand.ExamineButton: examine %s
    DebugControl.ButtonLegend.ExamineButton: EX
    DebugControl.ButtonPixmapFlag.ExamineButton: False

    !
    DebugControl.ButtonCommand.ExamineASCIZButton: examine/asciz %s
    DebugControl.ButtonLegend.ExamineASCIZButton: E/az
    DebugControl.ButtonPixmapFlag.ExamineASCIZButton: False
    !
    DebugControl.ButtonCommand.ExamineASCICButton: examine/ascic %s
    DebugControl.ButtonLegend.ExamineASCICButton: E/ac
    DebugControl.ButtonPixmapFlag.ExamineASCICButton: False

    !
    DebugControl.ButtonCommand.EvalButton:  evaluate %s
    DebugControl.ButtonLegend.EvalButton:  EVAL
    DebugControl.ButtonPixmapFlag.EvalButton: False
    !
    DebugControl.ButtonCommand.MonitorButton: monitor %s
    DebugControl.ButtonLegend.MonitorButton: MON
    DebugControl.ButtonPixmapFlag.MonitorButton: False

    !
    ! THE FOLLOWING RESOURCES CAN ONLY BE CHANGED BY EDITING THIS FILE.
    ! -----------------------------------------------------------------
    ! Be sure to trim off any trailing white-spaces.
    !
    ! FONT RESOURCES:
    !
    !   If a font is specified for a view, and the font is available on the
    !   system, it will be used for that view.
    !
    !   For any views which do not explicitly specify a font, the font specified
    !   by the resource "DebugDefault.Font" will be used if it is available on the
    !   system.
    !
    !   If no font resources are specified at all, the debugger will use the
    !   systems own default font specification.
    !
    !   The "DebugOptions.Font" applies to all optional views.  We suggest that
    !   you select a font with a point size no larger than 14 in the option views
    !   in order to preserve label alignment.
    !
    !   Using 132 column sources?  Try this narrow font:
    !       -dec-terminal-medium-r-narrow--14-100-100-100-c-60-iso8859-1
    !
    !              FORMAT:   -*-FONTNAM-FACE-T-*--*-PTS-*-*-*-*-CHARSET
    !
    DebugDefault.Font:  -*-COURIER-BOLD-R-*--*-120-*-*-*-*-ISO8859-1
    DebugSource.Font:   -*-COURIER-BOLD-R-*--*-120-*-*-*-*-ISO8859-1
    DebugInstruction.Font:   -*-COURIER-BOLD-R-*--*-140-*-*-*-*-ISO8859-1
    DebugMessage.Font:  -*-COURIER-BOLD-R-*--*-120-*-*-*-*-ISO8859-1
    DebugOptions.Font:   -*-COURIER-BOLD-R-*--*-120-*-*-*-*-ISO8859-1

    !
    ! STARTUP RESOURCES: 3=Iconified, 0=Visible
    !
    DebugSource.initialState:  0
    DebugControl.initialState:  0
    DebugEditor.initialState:  0
    DebugInstruction.initialState:  0

    !
    ! COLOR RESOURCES:
    !
    ! Use any of the OSF Motif Named Colors.
    !
    ! Foreground = Text Color, Background = Window Color
    !
    ! Try: Gainsboro, MintCream, Linen, SeaShell, MistyRose, Honeydew
    !      Cornsilk, Lavender
    !
    ! To use your system default color scheme, comment out all lines
    ! pertaining to color.
    !
    ! Common color scheme (unless overridden for a specific view)
    !
    *background:     Gainsboro
    *borderColor:     Red
    !
    ! Source View Colors
    !
    !DebugSource*background:   Gainsboro
    DebugSource*topShadowColor:                     WindowTopshadow
    DebugSource*bottomShadowColor:                  WindowBottomshadow
    DebugSource*src_txt.foreground:   blue
    DebugSource*src_txt.background:   white
    DebugSource*src_lineno_txtw.foreground:  red
    DebugSource*cnt_msg_txt.foreground:  black
    DebugSource*cnt_msg_txt.background:  white

    !
    ! Control View Colors
    !
    !DebugControl*background:   Gainsboro
    DebugControl*topShadowColor:                    WindowTopshadow
    DebugControl*bottomShadowColor:                 WindowBottomshadow

    !
    ! Instruction View Colors
    !
    !DebugInstruction*background:   Gainsboro
    DebugInstruction*topShadowColor:                WindowTopshadow
    DebugInstruction*bottomShadowColor:             WindowBottomshadow
    DebugInstruction*inst_txt.foreground:  blue
    DebugInstruction*inst_txt.background:  white
    DebugInstruction*inst_addrno_txtw.foreground:  red

    !
    ! Editor Colors
    !
    !DebugEditor*background:   Gainsboro
    DebugEditor*topShadowColor:                 WindowTopshadow
    DebugEditor*bottomShadowColor:              WindowBottomshadow
    DebugEditor*edit_textw.foreground:  black
    DebugEditor*edit_textw.background:  white

    !
    ! REGISTER VIEW RESOURCES:
    !
    ! Which Registers to display by default in the Register View?
    ! CF = Call Frame, GP = General Purpose, FP = Floating Point (Alpha Only)
    !
    *Show_CF_Registers.set:  True
    *Show_GP_Registers.set:  False
    *Show_FP_Registers.set:  False

    !
    ! SHOW MESSAGE/COMMAND SEPARATOR LINES?
    !
    *Show_Message_Separators.set:  True
    !
    ! TRACK LANGUAGE CHANGES? (parser follows module language)
    !
    *Track_Language_Changes.set:  False

    !
    ! KEY SEQUENCE RESOURCES:
    !
    ! Key sequence used to activate the dialog box for conditional and action
    ! breakpoints.
    !
    DebugSource.ModifyBreakpointToggleSequence: Ctrl <Btn1Down>, Ctrl <Btn1Up>

    !
    ! GENERAL KEYPAD FUNCTIONS:
    !
    !<Key>0xFFB0=KP0, <Key>0xFF91,<Key>0xFFB0=GOLD-KP0,
    !<Key>0xFF94,<Key>0xFFB0=BLUE-KP0, <Key>0xFFB1=KP1,
    !<Key>0xFF91,<Key>0xFFB1=GOLD-KP1, <Key>0xFFAC=KP,
    DebugSource.*XmText.translations:#override\n\
        <Key>0xFFB0: EnterCmdOnCmdLine("step/line") \n\
        <Key>0xFFB1: EnterCmdOnCmdLine("examine") \n\
        <Key>0xFFAC: EnterCmdOnCmdLine("go") \n\
        <Key>0xFF91,<Key>0xFFB0: EnterCmdOnCmdLine("step/into") \n\
        <Key>0xFF94,<Key>0xFFB0: EnterCmdOnCmdLine("step/over") \n\
        <Key>0xFF91,<Key>0xFFB1: EnterCmdOnCmdLine("examine^") \n\
        <Key>0xFFB5: EnterCmdOnCmdLine("show calls") \n\
        <Key>0xFF91,<Key>0xFFB5: EnterCmdOnCmdLine("show calls 3") \n\
        <Key>0xFF8D: activate()\n

    !
    ! IDENTIFIER WORD SELECTION: (language-based delimiters)
    ! NOTE: DO NOT use any double click combinitation for the following resource
    !       otherwise normal text selection in the source window will not work.
    !
    DebugSource.IdentifierSelectionSequence: Ctrl<Btn1Down>
    !
    ! EXIT CONFIRMATION:
    !
    DebugDisplayExitConfirmDB:  True

    !
    ! COMMAND ECHO:
    !
    DebugEchoCommands:   True
    !
    ! TITLE FORMAT: Main window and optional view window.
    !
    ! The following title format directives are supported:
    !
    !   %t - The title of the debugger application.
    !   %p - The name of the user program being debugged.
    !   %f - The name of the current file displayed in the source window.
    !
    DebugControl.TitleFormat: %t - %p: %f

    !
    ! DRAG AND DROP MESSAGE SUPRESSION: (Dont mess with these)
    !
    *.dragInitiatorProtocolStyle: DRAG_NONE
    *.dragReceiverProtocolStyle:  DRAG_NONE

### 10.10.4.1 「Breakpoint」ダイアログ・ ボックスを表示するキー・ シーケンスの定義

省略時の設定では，条件付きブレークポイントとアクション・ブレークポイントのダイアログ・ ボックスを表示するキー・シーケンスは，Ctrl/MB1 です(第10.4.5項と第10.4.6項を参照)。 別のキー・シーケンスを定義するには， リソース・ファイル内の次のリソースの現在の定義を編集します。

         DebugSource.ModifyBreakpointToggleSequence:   Ctrl<btn1down>(2)

### 10.10.4.2 言語依存のテキスト選択のキー・ シーケンスの定義

省略時の設定では，メイン・ウィンドウと命令ウィンドウ内の言語依存のテキスト選択用のキー・ シーケンスは，Ctrl/MB1です(第10.5.1項を参照)。 別のキー・シーケンスを定義するには， リソース・ファイル内の次のリソースの現在の定義を編集します。 次に例を示します。

         DebugSource.IdentifierSelectionSequence  Ctrl<btndown>

標準DECwindows Motifの単語選択との矛盾を避けるため， Ctrl<btn1down>(2)などのダブル・クリックとの組み合わせは使用しないでください。

### 10.10.4.3 表示テキスト用のフォントの定義

デバッガの各ウィンドウとビューに表示されるテキストに別のフォントを定義するには， リソース・ファイル内の次のリソースの現在の定義を編集します。 次に例を示します。

         DebugDefault.Font:  -*-COURIER-BOLD-R-*--*-120-*-*-*-*-ISO8859-1

### 10.10.4.4 キーパッド上のキーのバインディングの定義

既にコマンドを割り当てられているキーに別のコマンドをバインドするには， リソース・ファイル内の次のリソースの現在の定義を編集します。次に例を示します。

             <key>0xFFB0: EnterCmdOnCmdLine("step/line 3") \n\

現在コマンドを割り当てられていないキーにコマンドをバインドする場合は， 『X and Motif Quick Reference Guide』のKeysym Encoding の章のキー指定を参照してください。

# 10.11 切り離されたプロセスのデバッグ

プリント・シンビオントのように，コマンド行インタプリタ(CLI)なしで動作する， 切り離されたプロセスをデバッグするとき，デバッガにはDECWindows Motif インタフェースを使用することはできません。

CLIなしで動作する，切り離されたプロセスをデバッグするときは， デバッガに文字セル(画面モード)インタフェースを使用します( 第1.12節を参照)。

[ 前のページ ] [ 次のページ ] [ 目次 ] [ 索引 ] [ DOC Home ]