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

# 1 デバッガ概要

本章ではOpenVMSデバッガのコマンド・インタフェースについて説明します。 本章には次の内容が含まれています。

- デバッガの機能についての概要

- デバッグ用プログラムのコンパイルとリンクの方法

- デバッガ・セッションの開始と終了の方法

- 機能別に分けられたデバッガ・コマンドの一覧

基本的なデバッグ・タスクについては，第2 章を参照してください。

# 1.1 デバッガの概要

OpenVMSデバッガは，実行時のプログラミング・エラーや論理エラーなどのバグの場所をつきとめるためのツールです。 コンパイルとリンクには成功しても正常に実行されないプログラムに対してデバッガを使用します。 このようなプログラムは，たとえば，不正な出力を行ったり，無限ループに陥ったり， 途中で終了してしまいます。

OpenVMSデバッガを使用すると，プログラムを実行しながら会話形式でプログラムの動作をモニタし， 操作することにより，プログラムのエラーを見つけることができます。 デバッガ・コマンドを使用すると，次のことが可能です。

- プログラムの実行を制御し，監視できる。

- プログラムのソース・コードを表示し，ブラウズして，注意すべき命令と変数を細かく確認できる。

- 指定したポイントでプログラムの実行を中断して，変数やプログラムの他の要素の変化をモニタできる。

- 変数の値を変更する。場合によっては，ソース・コードの編集や再コンパイルおよび再リンクを行わずに， 変更したプログラムをテストできる場合もある。

- プログラムの実行パスをトレースする。

- プログラムの実行中に変数やその他のプログラム要素の変化をモニタする。

以上が基本的なデバッグ方法です。プログラム内のエラーを特定することができれば， ソース・コードを編集，コンパイル，リンクして，修正バージョンを実行することができます。

デバッガとそのドキュメントを使用していくうちに，デバッグには基本的な方法以外に様々な方法もあることが分かります。 また，ユーザのニーズに合わせてデバッガをカスタマイズすることもできます。 第1.1.1項では，OpenVMS デバッガの機能の概要を説明します。

注意
  カーネルとメイン・デバッガはグローバル・ セクションを通じて通信します。メイン・デバッガは65ページ(VAX の場合)または65ページレット(Alphaの場合)のグローバル・セクション( どちらのプラットフォームでも65*512バイト)を通じて，最大8つのカーネル・ デバッガと通信します。したがって，システム・パラメータGBLPAGES とGBLSECTIONSの値を大きくしなければならないことがあります。 たとえば，10人のユーザがデバッガを同時に使用する場合には，デバッガは10 個のグローバル・セクションを必要とし，全部で650グローバル・ ページまたはページレットを使用します。

注意
  各ユーザは，プログラムで必要とされる数のプロセスの他に， デバッガの追加サブプロセスを生成できるだけの十分なPRCLM クォータを必要とします。

  BYTLM，ENQLM， FILLM，PGFLQUOTAはプールされるクォータです。次のように，デバッガ・ サブプロセスを考慮して，これらのクォータの値を大きくする必要があります。

  - 各ユーザのENQLMクォータは，少なくともデバッグするプロセスの数だけ大きくしなければならない。

  - 各ユーザのPGFLQUOTAを大きくしなければならない。ユーザのPGFLQUOTA が不十分な場合には，デバッガを起動することができなかったり， 実行中に"virtual memory exceeded"というエラーが表示されることがある。

  - 各ユーザのBYTLMクォータとFILLMクォータを大きくしなければならない。 デバッグする各イメージ・ファイル，対応するソース・ ファイル，デバッガ入力ファイル，出力ファイル，ログ・ファイルを開くには， 十分なBYTLMクォータとFILLMクォータが必要である。これらのクォータを大きくするには，SYS$SYSTEM:AUTHORIZE.EXE を実行して，SYSUAF.DAT のパラメータを調整する。

## 1.1.1 デバッガの機能

◆サポートしているプログラミング言語

VAXプロセッサでデバッガを使用する場合，次の各VAX 言語で記述されたプログラムをデバッグすることができます。

Ada | BASIC | BLISS | C
C++ | COBOL | DIBOL | Fortran
MACRO-32 | Pascal | PL/I | RPG II
SCAN |  |  |

Alphaプロセッサでデバッガを使用する場合， 次の各DEC言語で記述されたプログラムをデバッグすることができます。

Ada | BASIC | BLISS | C
C++ | COBOL | Fortran | MACRO- 32[1]
MACRO-64 | Pascal | PL/I |
[1] MACRO-32はAMACROコンパイラでコンパイルしなければなりません。

デバッガは，サポートされている言語の構文，データ型，演算子，式，有効範囲規則， その他の構造を認識します。SET LANGUAGEコマンドを使用すると， デバッグ・セッションの途中で，1つの言語から他の言語へとデバッグ・ コンテキストを変更することができます。

◆シンボリック・デバッガ

デバッガはシンボリック・デバッガです。プログラムの記憶位置は，プログラムで使用するシンボル， つまり，変数名，ルーチン名，ラベルなどによって参照できます。 また，必要に応じてメモリ・アドレスやマシン・レジスタを指定することもできます。

◆すべてのデータ型のサポート

デバッガは，整数型，浮動小数点型，列挙型，レコード型，配列型などのコンパイラが生成するすべてのデータ型を認識します。 プログラム変数の値は， 宣言されている型に従って表示されます。

◆柔軟なデータ形式

デバッガでは，さまざまなデータ形式やデータ型を入力したり，表示できます。 プログラムのソース言語によって，データの入力と表示の省略時の形式が決定されます。 しかし，必要に応じて他の形式も選択できます。

◆プログラム実行の開始と再開

プログラムがデバッガによって制御されているときに，GOコマンドまたはSTEP コマンドを使用すると，プログラムの実行を開始したり，再開できます。GO コマンドを実行すると，プログラムは，指定したイベントが発生するまで実行されます( たとえば，PCが指定されたコード行になるか，変数が変更されるか， 例外が通知されるか，プログラムが終了するなど)。 STEPコマンドを使用すると，指定した数だけ命令またはソース・コード行を実行したり， プログラムが指定されたクラスの次の命令に到達するまで実行できます。

◆ブレークポイント

SET BREAKコマンドでブレークポイントを設定すると，特定の記憶位置でプログラムの実行を中断してプログラムの現在の状態をチェックすることができます。 記憶位置を指定する代わりに，特定の命令クラスによって実行を停止したり， ソース行の各行で実行を停止することもできます。 また，例外やタスキング(マルチスレッド)イベントなどの特定のイベントに応じて実行を中断することもできます。

◆トレースポイント

SET TRACEコマンドでトレースポイントを設定すると，特定の記憶位置を通るプログラムの実行パスをモニタすることができます。 トレースポイントが検出されると， デバッガはトレースポイントに達したことを報告してからプログラムの実行を続けます。SET BREAK コマンドと同様に， 例外イベントやタスク(マルチスレッド)イベントとして命令クラスをトレースしたり， イベントをモニタしたりすることもできます。

◆ウォッチポイント

SET WATCHコマンドでウォッチポイントを設定すると，特定の変数や他のメモリ記憶位置が変更されたときに必ず実行を停止させることができます。 ウォッチポイントが検出されると，デバッガがその時点で実行を中断して， 変数の古い値と新しい値を報告します。

◆変数とプログラム記憶位置の操作

EXAMINEコマンドを使用すると，変数やプログラム記憶位置の値をユーザが確認することができます。 それらの値を変更するにはDEPOSITコマンドを使用します。 変更したあとで，その影響を調べるために実行を継続することができます。 その場合にプログラムを再コンパイル，再リンク，および再実行する必要はありません。

◆式の評価

EVALUATEコマンドを使用すると，ソース言語式やアドレス式の値を求めることができます。 現在デバッガに設定されている言語の構文に従って，ユーザが式と演算子を指定します。

◆制御構造

別のコマンドの実行を制御するために，各コマンドに対して論理的な制御構造( FOR, IF, REPEAT, WHILE) を使用することができます。

◆共用可能イメージのデバッグ

共用可能イメージ(直接実行はできないイメージ)をデバッグすることができます。SET IMAGE コマンドを使用すると，(/DEBUG修飾子によりコンパイルされたりリンクされている) 共用可能イメージの中で宣言されているシンボルをアクセスすることができます。

◆マルチプロセス・デバッグ

マルチプロセス・プログラム(複数のプロセス内で実行されるプログラム) をデバッグすることができます。SHOW PROCESSコマンドやSET PROCESSコマンドを使用すると， プロセスの情報を表示したり，個々のプロセス内のイメージの実行を制御したりすることができます。

◆タスク・デバッグ

マルチスレッド・プログラムとも呼ばれるタスキング・プログラムをデバッグすることができます。 これらのプログラムは，DECthreadsサービスやPOSIX 1003.1b サービス，または各言語固有のタスキング・サービス(たとえばAda のタスキング・プログラム)を使用します。SHOW TASKコマンドやSET TASK コマンドを使用すると，タスクの情報を表示したり，個々のタスクの実行を制御したりすることができます。

◆ベクタ・デバッグ(VAXのみ)

VAXプロセッサでは，ベクタ化されたプログラム， つまりVAXベクタ命令を使用するプログラムをデバッグすることができます。 ベクタ命令レベルでの実行の制御とモニタ，ベクタ命令の検査と格納， ベクタ・レジスタの内容の操作，特定のベクタ要素を表示するためのマスクの使用， およびスカラ型プロセッサとベクタ型プロセッサの間の同期の制御などを行うことができます。

◆サポートされている端末とワークステーション

すべてのVTシリーズ端末とMicroVAXワークステーションがサポートされています。

## 1.1.2 便利な機能

◆オンライン・ヘルプ

オンライン・ヘルプは，デバッガ・セッションの途中でいつでも利用することができます。 オンライン・ヘルプには，すべてのデバッガ・コマンドについての情報と， 選ばれたトピックについての情報が含まれています。

◆ソース・コードの表示

デバッガ・セッションでは，OpenVMSデバッガでサポートされる言語で作成されたプログラム・ モジュールのソース・コードを表示できます。

◆画面モード

画面モードでは，ウィンドウにいろいろな情報を表示したり， 取り込んだりすることができます。このウィンドウは，画面内で移動したりサイズを変更したりできるスクロール可能なウィンドウです。 自動的に更新されるディスプレイでリース， 命令，レジスタをそれぞれ見ることができます。 デバッガの入出力(I/O)や診断メッセージを表示するよう選択することもできます。 また，特定のコマンド・シーケンスの出力を取り込むディスプレイ・ ユニットを作成することもできます。

◆保持デバッガ

保持デバッガ (kept debugger)でデバッガを実行すると，現在のデバッガ・ セッションの内部から別のプログラム・イメージを実行したり， 同じイメージを再実行することができ，そのためにデバッガを終了して再起動する必要はありません。 プログラムを再実行する場合には，大部分のトレースポイントやウォッチポイントをはじめ， 前に設定したブレークポイントを保持するのか， 取り消すのかを選択できます。

◆DECwindows Motifインタフェース

OpenVMSデバッガには，オプションとしてDECwindows Motifグラフィカル・ ユーザ・インタフェース(GUI)があり，プッシュ・ボタン，プルダウン・ メニュー，ポップアップ・メニューを使用して，共通のデバッガ・ コマンドにアクセスできます。GUIはオプションとして使用できるデバッガ・ コマンド・ライン・インタフェースの拡張機能であり，DECwindows Motifを実行しているワークステーションで使用できます。GUIを使用すると，DECwindows Motif 環境で関連するすべてのデバッガ・コマンドにコマンド・ ラインから完全にアクセスできます。

◆Microsoft Windowsインタフェース

OpenVMSデバッガには，オプションとしてクライアント/サーバ構成があり，Microsoft Windows 95 ，またはMicrosoft Windows NTを実行しているPC からデバッガにアクセスして，その機能を使用することができます。 このデバッガのインプリメントには，OpenVMS(VAXまたはAlpha CPU)上で実行されるデバッグ・ サーバと，Microsoft Windows NTおよびMicrosoft Windows 95(IntelまたはAlpha CPU)上で実行されるデバッグ・クライアント・ インタフェースがあります。

◆クライアント/サーバ構成

クライアント/サーバ構成により，DECwindows Motifインタフェースを使用しているOpenVMS ノードから，あるいはMicrosoft Windowsインタフェースを使用しているPC から，特定のOpenVMSノード上でリモートに実行しているプログラムをデバッグすることができます。 多くのデバッグ・オプションを可能とする同一デバッグ・ サーバに対して，同時に最大31のデバッグ・ クライアントがアクセスすることができます。

◆キーパッド・モード

デバッガの起動時には，よく使用されるいくつかのデバッガ・コマンド・ シーケンスが省略時の設定により数値キーパッドのキーに割り当てられます(VT52 ，VT100，またはLK201のキーボードを使用している場合)。そのため， キーボードでコマンドを入力するよりも少ないキーストロークでこれらのコマンドを入力することができます。 また，ユーザが独自のキー定義を作成することもできます。

◆ソースの編集

デバッガ・セッションの途中でエラーを見つけたときにEDITコマンドを使用すると， 各自のシステムで使用可能なエディタを使用することができます。 使用するエディタはSET EDITORコマンドで設定します。DECランゲージ・ センシティブ・エディタ(LSE)を使用すると，画面モードのソース・ ディスプレイに表示されているコードのソース・ファイルの中に自動的に編集カーソルが置かれます。

◆コマンド・プロシージャ

デバッガにコマンド・プロシージャ(複数のデバッガ・コマンドが入っているファイル) を実行させることができます。これによって，デバッガ・ セッションを再現したり，直前のセッションを続行したり，1つのデバッガ・ セッションの中で同じデバッガ・コマンドを何度も入力する手間を省いたりすることができます。 さらにコマンド・プロシージャへパラメータを渡すこともできます。

◆初期化ファイル

省略時のデバッグ・モード，画面ディスプレイ定義，キーパッド・キー定義， シンボル定義などを設定するコマンドの入っている初期化ファイルを作成することができます。 デバッガを起動すると，これらのコマンドが自動的に実行され， 各ユーザのニーズに合ったデバッグ環境が整います。

◆ログ・ファイル

デバッガ・セッション中に入力したコマンドや，それらのコマンドに対するデバッガの応答をログ・ ファイルに記録することができます。ログ・ファイルを使用するとデバッグ作業の流れを追うことができます。 また，以後のデバッガ・ セッションにおいてログ・ファイルをコマンド・プロシージャとして使用することもできます。

◆シンボル定義

長いコマンドやアドレス式を表現するためのシンボルや，値を短縮形で表現するためのシンボルをユーザが独自に定義することができます。

# 1.2 デバッグのための実行イメージの準備

プログラムをデバッガの制御下に置いて，最も効果的なシンボリック・ デバッグを行うには，第1.2.1項および 第1.2.2項で説明しているように， 最初にコンパイラおよびリンカの/DEBUG修飾子を使用してプログラム・モジュール( コンパイル単位)をコンパイルおよびリンクしておく必要があります。

## 1.2.1 デバッグのためのプログラムのコンパイル

例 1-1では，FORMS.CとINVENTORY.Cという2 つのソース・モジュールにより構成されているデバッグのためのCプログラム，FORMS.EXE のコンパイル方法を示しています。FORMS.Cはメイン・ プログラム・モジュールです。

### 例 1-1 /DEBUG修飾子によるプログラムのコンパイル

    $ CC/DEBUG/NOOPTIMIZE INVENTORY,FORMS

言語によっては，/DEBUG修飾子や/NOOPTIMIZE修飾子をコンパイラ・コマンドの省略時設定にしているものもあることに注意してください。 この例では強調のためにこれらの修飾子を使用しています。 特定の言語固有のコンパイルとリンクについては， 各言語とともに提供されるドキュメントを参照してください。

例 1-1のコンパイラ・コマンドに指定した/DEBUG 修飾子は，オブジェクト・モジュールFORMS.OBJとINVENTORY.OBJ で，FORMS.CとINVENTORY.Cに関連付けられたシンボル情報を含むようにコンパイラに要求します。 このようにすると，プログラムをデバッグしているときに， 変数やルーチン，他の宣言されたシンボルのシンボル名を参照できます。 シンボル情報は，/DEBUG修飾子を使用して作成されたオブジェクト・ ファイルにだけ格納されます。すべてのシンボル情報を含むのか， プログラムの流れをトレースすることだけが必要なのかは， ユーザが制御できます(第5.1.1項を参照) 。

一部のコンパイラでは，オブジェクト・コードを最適化して，プログラムのサイズを小さくしたり， 実行速度を向上できます。しかし，このようにすると， オブジェクト・コードは必ずしもソース・コードと対応しなくなり， その結果，デバッグが困難になります。この状況を回避するには，/NOOPTIMIZE コマンド修飾子(またはそれに相当する機能)を使用して， プログラムをコンパイルします。最適化されていないプログラムをデバッグした後， 今度は/NOOPTIMIZE修飾子を指定せずにプログラムを再コンパイルし， テストできます。このようにすると，最適化機能を利用できます。 最適化の効果については，第14.1 節を参照してください。

## 1.2.2 デバッグのためのプログラムのリンク

例 1-2は，FORMS.EXEというCプログラムをリンクする方法を示しています。 このプログラムはFORMS.CとINVENTORY.C という2つのソース・モジュールで構成されます。FORMS.Cはメイン・ プログラム・モジュールです。どちらのソース・モジュールも/DEBUG 修飾子を使用してコンパイルされています(例 1-1 を参照)。

### 例 1-2 /DEBUG修飾子を使用したプログラムのリンク

    $ LINK/DEBUG FORMS,INVENTORY

VAXプロセッサでは，LINKコマンドにリンカ・ オプション・ファイルを指定できます(必要な場合)。例 1-3 では，/OPTIONS修飾子は， OPTIONS_FILEがリンカ・オプション・ファイルであることを示しています。

### 例 1-3 /OPTIONS_FILE修飾子を使用したプログラムのリンク(VAX のみ)

    $ LINK/DEBUG FORMS,INVENTORY,OPTIONS_FILE/OPTIONS

例1_2と1-3では，LINK コマンドの/DEBUG修飾子は，リンクされているオブジェクト・ モジュールに含まれているすべてのシンボル情報を実行可能イメージに含むようにリンカに要求します。 大部分の言語では，インクルードするすべてのオブジェクト・ モジュールをLINKコマンドに指定しなければなりません。LINK コマンドを使用してシンボル情報を制御する方法については， 第5.1.3項を参照してください。

Alphaシステムでは，/DSF修飾子を使用してリンクされたプログラムをデバッグできるようになりました( したがって，別のデバッグ・シンボル・ ファイルが作成されます)。LINKコマンドに/DSF修飾子を指定すると，リンカはシンボル情報を格納するために別の.DSF ファイルを作成します。このため， これまでより柔軟なデバッグ・オプションを選択できます。このようなプログラムをデバッグするには， 次のことが必要です。

- .DSFファイルの名前は，デバッグする.EXEファイルの名前と一致しなければならない。

- DBG$PROCESSがDEFAULTまたはMULTIPROCESSとして定義されている構成で実行しなければならない。

- .DSFファイルを格納するディレクトリを指すように， DBG$IMAGE_DSF_PATHを定義しなければならない。

次の例を参照してください。

         $ CC/DEBUG/NOOPTIMIZE TESTPROGRAM
         $ LINK/DSF=TESTDISK:[TESTDIR]TESTPROGRAM.DSF TESTPROGRAM
         $ DEFINE DBG$IMAGE_DSF_PATH TESTDISK:[TESTDIR]
         $ DEBUG/KEEP TESTPROGRAM

個別のシンボル・ファイルがあるプログラムのデバッグの詳細については， 第5.1.5項を参照してください。/DSF 修飾子の使い方については，『OpenVMS Linker Utility Manual』を参照してください。

## 1.2.3 LINKコマンドとRUNコマンドによるデバッガ起動の制御

実行可能なイメージにシンボル情報が渡されることに加え，LINK/DEBUGコマンドを使用すると， 作成されたイメージをDCLのRUNコマンドで実行する場合， イメージ・アクティベータがデバッガを起動します。(この起動方法については， 第1.6節を参照してください。)

コマンド修飾子/DEBUGを使用してイメージのコンパイルとリンクを行った場合でも， そのイメージをデバッガの制御下に置かずに通常どおりに実行することができます。 それにはDCLのRUNコマンドで/NODEBUG修飾子を使用してください。 次に例を示します。

         $ RUN/NODEBUG FORMS

エラーがないと思われる場合は，この方法で簡単にプログラムをチェックすることができます。 デバッガが必要とするデータは実行可能なイメージ内の領域を占有しますので， プログラムが正常であると考えられるときは/DEBUG 修飾子を使用しないで，もう一度プログラムをリンクしてください。 その結果，デバッグ・シンボル・テーブルにトレースバック・データだけを持ったイメージが作成され， 使用するディスク領域を節約することができます。

LINKコマンドとRUNコマンドの修飾子でデバッガの起動を制御する方法を 表 1-1に要約します。LINKコマンドの/[NO]DEBUG 修飾子と/[NO]TRACEBACK修飾子は，デバッガの起動だけでなく， デバッグ時に提供されるシンボル情報の最大レベルにも影響しますので注意してください。

### 表 1-1 LINKコマンドとRUNコマンドによるデバッガ起動の制御

LINKコマンド修飾子 | デバッガなしの プログラム実行 | デバッガありの プログラム実行 | 使用可能な最大シンボル情報 [1]
--- | --- | --- | ---
/DEBUG | RUN /NODEBUG | RUN | すべて
なしまたは/TRACEBACK または/NODEBUG [2] | RUN | RUN /DEBUG | トレースバックのみ[3]
/NOTRACEBACK | RUN | RUN/DEBUG[4] | なし
/DSF[5] | RUN | DEBUG /KEEP[6] | すべて
[1] COMPILEコマンドの修飾子と LINKコマンドの修飾子の両方で デバッグを制御しているときに使用可能なシンボル情報のレベル (第5.1節を参照)。 [2] LINK/TRACEBACK(またはLINK/NODEBUG)はLINKコマンドの 省略時設定です。 [3]トレースバック情報には，コンパイラ生成行番号，ルーチン名， モジュール(コンパイル単位)名が含まれます。このシンボル情報は， 実行時エラーが起きたときに(実行を一時停止した地点の)PC値と アクティブな呼び出しを示すために， トレースバック条件ハンドラが使用します。 デバッガのSHOW CALLSコマンドも シンボル情報を使用します( 第2.3.3項を参照)。 [4] RUN/DEBUGコマンドでデバッガを実行することはできますが， LINK/NOTRACEBACKコマンドを実行しているとシンボリック・デバッグを行うことはできません。 [5] Alphaのみ [6]論理名DBG$DSF_IMAGE_NAMEは，.DSFファイルを格納するディレクトリを指さなければなりません( 第1.2.2 項を参照)。

OpenVMS Alphaシステムでは，デバッガやヒープ・アナライザのようにシステム・ サービス・インタセプション(SSI)を使用するものは，共有リンクによって起動されたシステム・ サービス呼び出しイメージを受け取ることができません。 そのためイメージを起動するプログラムは，イメージがリンクされているか/DEBU G を使って実行されている場合，共有リンクを避け， プライベート・イメージのコピーを起動するようにします。ただしこの場合， デバッガやヒープ・アナライザが制御するアプリケーションの性能に影響が現れ， 共有リンクによって起動されたイメージほど高速に動作しなくなります。

# 1.3 保持デバッガでのプログラムのデバッグ

OpenVMSデバッガは保持デバッガで実行できます。その場合には，同じプログラムを何度も再実行することができ， また，別のプログラムを実行することもできます。 そのためにデバッグ・セッションを終了する必要はありません。 この節では，次の操作方法について説明します。

- 保持デバッガの起動方法，および起動後にプログラムをデバッガの制御下に置く方法

- 現在のデバッガ・セッションからの同一プログラムの再実行

- 現在のデバッガ・セッションからの他のプログラムの実行

- プログラムの実行に対する割り込み，およびデバッガ・コマンドの強制終了

- デバッガ・セッションに対する割り込み，およびそのあとのデバッグ・ セッションへの復帰

## 1.3.1 保持デバッガの起動

この項では，DCLレベル($)から保持デバッガを起動して，そのあとでプログラムをデバッガの制御下に置く方法について説明します。 その他の起動方法については， 第1.6節および第1.7節で説明します。

第1.3.3項で説明する再実行機能と第1.3.4項の実行機能を使用するには， ここで説明する方法に従って保持デバッガを起動してください。

注意
  次の問題点または制限事項は保持デバッガ固有のものです。

  - 前に実行したデバッガ・プロセスが完全に停止されていない場合には， デバッガを起動するときに，次のエラーが表示されることがある。

             %DEBUG-E-INTERR, internal debugger error in
                DBGMRPC\DBG$WAIT_FOR_EVENT got an ACK

    この問題に対処するには，デバッガを終了する。その後，DCLのSHOW PROCESS/SUBPROCESS コマンドを使用して，デバッガ・サブプロセスが終了したかどうか確認する。 終了している場合には，DCLのSTOPコマンドを使用して停止した後， デバッガを再起動する。

  - サイズの大きい一連のプログラムを実行すると，メモリやグローバル・ セクション，あるいは他のリソースがすべて使用されてしまうため， デバッガが異常終了することがある。

    この問題を解決するには， デバッガを終了した後，デバッガ・セッションを再起動する。

保持デバッガを起動して，プログラムをデバッガの制御下に置くには，次の手順に従ってください。

1. 第1.2節の説明どおりにプログラムをコンパイルおよびリンクしたことを確認する。

2. デバッグしようとしているプログラムの種類に応じた適切なデバッグ構成( 省略時の構成またはマルチプロセス・デバッグ構成) となっているかどうかを確認する(第1.9 節を参照)。1つのプロセス内でのみ実行するプログラムの場合(典型的な場合) は省略時の構成を使用する。

3. 次のコマンド行を入力する。

            $ DEBUG/KEEP

   デバッガが起動するとそのバナーが表示され，ユーザ定義の初期化ファイルが実行される( 第13.2節を参照)。表示されたDBG> プロンプトは，第2.1 節で説明する方法でデバッガ・コマンドを入力できるようになったことを示す。

4. デバッガのRUNコマンドを使用してユーザ・プログラムをデバッガの制御下に置く。RUN コマンドには，ユーザ・プログラムの実行可能なイメージをパラメータとして指定する。 次に例を示す。

            DBG> RUN FORMS
            Language: C, Module: FORMS
            DBG>

表示されているメッセージは，このデバッガ・セッションがCプログラム用に初期化されており， メイン・プログラム単位(イメージ遷移アドレスを持ったモジュール) の名前がFORMSであることを示しています。初期化によって言語固有のデバッガ・ パラメータが設定されます。これらのパラメータは， デバッガが名前や式を解析する方法や，デバッガの出力の書式などを制御します。 言語固有のパラメータについての詳しい説明は，第4.1.9項を参照してください。

メイン・プログラム・ユニットを起動するときや，特定のプログラムで何らかの初期化コードを起動するときに，( 一時的なブレークポイントを設定することにより) デバッガはプログラムの実行を中断します。その場合， デバッガは次のメッセージを表示します。

         Type GO to reach main program

これらのプログラム(たとえばAdaプログラム)では，一時的なブレークポイントで完全なシンボル情報を使用して， 初期化コードをデバッグすることができます。 詳細については，第14.3 節を参照してください。

第2章で説明されているように， これでプログラムをデバッグすることができます。

◆引数が必要なプログラムのRUNおよびRERUN コマンド・オプション

プログラムによっては，引数が必要なものもあります。この節では，デバッガのRUN コマンドとRERUNコマンドの使用方法，および/ARGUMENTS修飾子と/COMMAND 修飾子でデバッガ制御を行う場合に，このようなプログラムを実行する方法について説明します。

保持デバッガでデバッガを起動した後，RUNコマンドにイメージ名を入力するか， またはRUN/COMMANDコマンドとDCLフォーリン・コマンドを使用して， デバッグするイメージを指定できます。DCLフォーリン・コマンドを指定するには，RUN コマンドの/COMMAND修飾子を使用します。

RUNコマンドとRERUNコマンドの/ARGUMENTS修飾子には，引数リストを指定できます。

次のデバッガ・セッションの例には，複数の方法が示されています。デバッグするプログラムは echoargs.c であり，入力引数を端末に表示するプログラムです。

         #include <stdio.h>

         main(int argc, char *argv[])
         {
           int i;

           for (i = 0; i < argc; i++)
             printf("%s\n", argv[i]);
         }

このプログラムを，次のようにコンパイル，リンクします。

         $ cc/debug/noopt echoargs.c
         $ link/debug echoargs

DCLフォーリン・コマンドは，次のように定義します。

         $ ECHO == "$ sys$disk:[]echoargs.exe"

保持デバッガを起動します。次の例のデバッガ・セッションでは，引数を渡す方法として3 種類の方法を紹介しています。

- /COMMANDと/ARGUMENTSをRUNに指定

- /ARGUMENTSをRERUNに指定

- /ARGUMENTSとイメージ名をRUNに指定

◆/COMMANDと/ARGUMENTSを指定したRUN

デバッガ・セッションのこのセクションでは，デバッガのRUNコマンドに/COMMAND 修飾子と/ARGUMENTS修飾子を指定する方法について説明します。/COMMAND 修飾子は，DCLフォーリン・コマンド echo を指定します。/ARGUMENTS 修飾子は引数 fa sol la mi を指定します。 最初のGOコマンドは echoargs.exe の初期化コードを実行します。 その後，デバッガはプログラムの起動時に一時的なブレークポイントでプログラムの実行を中断します。2 番目の GOコマンドは echoargs.exe を実行します。これは引数を画面に正しく表示します。

         $ debug/keep
              Debugger Banner and Version Number

         DBG> run /command="echo"/arguments="fa sol la mi"
         Language: C, Module: ECHOARGS
         Type GO to reach main program
         DBG> go
         break at routine ECHOARGS\main
            265: {
         DBG> go
         _dsa1:[jones.test]echoargs.exe;2
         fa
         sol
         la
         mi
         'Normal successful completion'

◆/ARGUMENTSを指定したRERUN

デバッガ・セッションのこのセクションでは，RERUNコマンドの/ARGUMENTS 修飾子を使用して，新しい引数fee fii foo fumによって同じイメージを再実行する方法を示します(/ARGUMENTS 修飾子を指定しなかった場合には， デバッガは前に使用した引数を使用してプログラムを再実行します) 。

最初の GO コマンドは echoargs.exe の初期化コードを実行します。 そのあと，デバッガはプログラムの起動時に一時的なブレークポイントでプログラムの実行を中断します。2 番目の GOコマンドは echoargs.exe を実行します。これは引数を画面に正しく表示します。

         DBG> rerun/arg="fee fii foo fum"
         Language: C, Module: ECHOARGS
         Type GO to reach main program
         DBG> go
         break at routine ECHOARGS\main
            265: {
         DBG> go
         _dsa1:[jones.test]echoargs.exe;2
         fee
         fii
         foo
         fum
         'Normal successful completion'

◆/ARGUMENTSとイメージ名を指定したRUN

デバッガ・セッションのこのセクションでは，RUNコマンドを使用して echoargs の新しいイメージを起動し，/ARGUMENTS修飾子を使用して引数 a b c を指定します。

最初の GO コマンドは echoargs.exe の初期化コードを実行します。 そのあと，デバッガはプログラムの起動時に一時的なブレークポイントでプログラムの実行を中断します。2 番目の GOコマンドは echoargs.exe を実行します。これは引数を画面に正しく表示します。

         DBG> run/arg="a b c" echoargs
         Language: C, Module: ECHOARGS
         Type GO to reach main program
         DBG> go
         break at routine ECHOARGS\main
            265: {
         DBG> go
         _dsa1:[jones.test]echoargs.exe;2
         a
         b
         c
         'Normal successful completion'
         DBG> quit

◆RUNコマンドの制限事項

デバッガのRUNコマンドについては，次の制限事項に注意してください。

- RUNコマンドを使用できるのは，DCLのDEBUG/KEEPコマンドを使用してデバッガを起動した場合のみです。

- 実行中のプログラムにデバッガを接続するためにRUNコマンドを使用することはできません( 第1.7 節を参照)。

- DECnetのリンクを通してデバッガの制御下でプログラムを実行することはできません。 デバッグするイメージとデバッガは両方とも同じノードになければなりません。

## 1.3.2 プログラム実行の終了

デバッガ・セッション中にプログラムの実行が正常に終了すると，次のメッセージが表示されます。

         'Normal successful completion'

このときユーザには次のオプションがあります。

- 同じデバッガ・セッションからプログラムを再実行することができる( 第1.3.3項を参照)。

- 同じデバッガ・セッションから他のプログラムを実行することができる( 第1.3.4項を参照)。

- デバッガ・セッションを終了することができる(第1.8節を参照)。

## 1.3.3 保持デバッガからの同じプログラムの実行

最初に第1.3.1項の説明どおりにデバッガを起動した場合は， 現在デバッガの制御下にあるプログラムを1つのデバッガ・ セッションの途中でいつでも再実行することができます。それにはRERUN コマンドを使用してください。次に例を示します。

         DBG> RERUN
         Language: C, Module: FORMS
         Type GO to reach main program

         DBG>

RERUNコマンドは，デバッグしていたイメージを終了してから，そのイメージの新しいコピーをデバッガの制御下に置きます。RUN コマンドを使用したときと同じように， 実行はメイン・ソース・モジュールの先頭で一時停止されます( 第1.3.1項を参照)。

RERUNコマンドを使用する場合，ブレークポイント，トレースポイント， 静的ウォッチポイントの現在の状態(有効であるのか，無効であるのか) を保存できます。ただし，特定の非静的ウォッチポイントの状態は，メイン・ プログラム・ユニット(実行が再起動される場所)を基準にして， ウォッチされる変数のスコープに応じて保存されないことがあります。 RERUN/SAVEは省略時の設定です。すべてのブレークポイント，トレースポイント， ウォッチポイントをクリアするには，RERUN/NOSAVEを使用します。

RERUNコマンドでは，現在デバッガの制御下にあるイメージの同一バージョンが使用されます。 同じデバッガ・セッションからそのプログラムの別バージョンまたは他のプログラムをデバッグするときは，RUN コマンドを使用してください。 プログラムに新しい引数を付けて再実行するとき，/ARGUMENTS 修飾子を使用します(「◆引数が必要なプログラムのRUNおよびRERUNコマンド・ オプション」を参照) 。

## 1.3.4 保持デバッガからの他のプログラムの実行

最初に第1.3.1項の説明どおりにデバッガを起動した場合は，1 つのデバッガ・セッションの中でいつでも他のプログラムをデバッガの制御下に置くことができます。 それにはRUNコマンドを使用してください。 次に例を示します。

         DBG> RUN TOTALS
         Language: FORTRAN, Module: TOTALS
         DBG>

デバッガはプログラムをロードし，メイン・ソース・モジュールの先頭で実行を一時停止します。

起動の条件と制約についての詳しい説明は，第1.3.1 項を参照してください。

RUNコマンドのすべてのオプションについての詳しい説明は，RUNコマンドの説明を参照してください。

# 1.4 プログラムの実行に対する割り込みとデバッガ・ コマンドの強制終了

デバッガ・セッションの途中でプログラムが無限ループに陥り，そのためにデバッガのプロンプトが再表示されなくなったときはCtrl/C を押します。 これでプログラムの実行に割り込みがかかり，デバッガのプロンプトに戻ります。Ctrl/C を押してもデバッガ・セッションは終了しません。次に例を示します。

         DBG> GO
            .
            .
            .
         <Ctrl/C>

         DBG>

Ctrl/Cを押すことでデバッガ・コマンドの実行を強制終了することもできます。 これは，たとえば，デバッガによる長いデータ・ストリームの表示中などに役立ちます。

プログラムを実行していないとき，またはデバッガが何の処理も行っていないときは，Ctrl/C を押しても何も起こりません。

ユーザのプログラムがCtrl/CのAST (非同期システム・トラップ)サービス・ ルーチンを使用できるようにしている場合，デバッガの強制終了機能を他のCtrl キー・シーケンスに割り当てるには，SET ABORT_KEYコマンドを使用します。 現在定義されている強制終了キーを示すには，SHOW ABORT_KEYコマンドを入力します。

デバッガ・セッションの途中でCtrl/Yを押したときの効果は，プログラムの実行中にCtrl/Y を押した場合と同じです。DCLコマンド・インタプリタ($ プロンプト)に制御が戻ります。

# 1.5 デバッガ・セッションの割り込みと再開

デバッガのSPAWNコマンドやATTACHコマンドを使用すると，デバッガのプロンプトからデバッガ・ セッションに割り込みをかけたり，DCLコマンドを入力したり， デバッガのプロンプトへ復帰したりできます。次に示すように， これらのコマンドの機能は本質的にDCLのSPAWNコマンドおよびATTACH コマンドと同じです。

- サブプロセスを作成するにはデバッガのSPAWNコマンドを使用する。

- 既存のプロセスやサブプロセスに接続するにはATTACHコマンドを使用する。

SPAWNコマンドを入力する場合，DCLコマンドをパラメータとして指定することも指定しないこともできます。DCL コマンドを指定すると，指定されたコマンドはサブプロセスの中で実行されます。 そのDCLコマンドがユーティリティを起動する場合， そのユーティリティはサブプロセス内で起動されます。DCL コマンドの終了時またはユーザがユーティリティを終了したときに， デバッガ・セッションに制御が戻ります。DCLコマンドDIRECTORY を実行する例を次に示します。

         DBG> SPAWN DIR [JONES.PROJECT2]*.FOR
            .
            .
            .
         %DEBUG-I-RETURNED, control returned to process JONES_1
         DBG>

Mailユーティリティを起動するDCLコマンドMAILを実行する例を次に示します。

         DBG> SPAWN MAIL
         MAIL> READ/NEW
            .
            .
            .
         MAIL> EXIT
         %DEBUG-I-RETURNED, control returned to process JONES_1
         DBG>

パラメータを指定しないでSPAWNコマンドを入力すると，サブプロセスが作成され， そのあとでDCLコマンドを入力することができます。サブプロセスからログ・ アウトするか，またはDCLのATTACHコマンドを使用して親プロセスに接続すると， デバッガ・セッションへ戻ります。次に例を示します。

         DBG> SPAWN
         $ RUN PROG2
            .
            .
            .
         $ ATTACH JONES_1
         Control returned to process JONES_1
         DBG>

デバッガ・セッションと，作成されたサブプロセス(別のデバッガ・セッションの場合もある) との間を何度も移動するときは，そのサブプロセスに接続するためにデバッガのATTACH コマンドを使用します。親プロセスへ戻るには，DCL のATTACHコマンドを使用します。デバッガを終了するたびに新しいサブプロセスを作成するわけではないので， システム・リソースがより効率的に使用されます。

2つのデバッガ・セッションを同時に実行している場合は，SET PROMPTコマンドを使用して， 一方のセッション用に新しいデバッガ・プロンプトを定義することができます。 これはセッションを区別するのに便利です。

# 1.6 プログラムの実行によるデバッガの起動

DCLのRUN filespecコマンドを使用すれば，1回の手順で非保持デバッガで， デバッガの制御のもとでプログラムを起動できます。

非保持デバッガでデバッガを実行している場合には，第1.3.3項と第1.3.4項で説明したデバッガのRERUN 機能とRUN機能を使用できません。デバッガの制御のもとで同じプログラムを再実行したり， 別のプログラムを実行するには，デバッガをいったん終了し， 再起動しなければなりません。

プログラムの実行によって非保持デバッガを開始するには，次の手順に従ってください。

1. 第1.2.1項および第1.2.2項の説明どおりにプログラムをコンパイルとリンクしたことを確認する。 また，第1.9節の説明どおりに適切なデバッグ構成を設定したことを確認する。

2. デバッガを起動するために，DCLコマンドのRUN filespecを入力する。

次に例を示します。

         $ RUN FORMS

                    Debugger Banner and Version Number

         Language: C, Module: FORMS
         DBG>

デバッガが起動すると，そのバナーが表示され，ユーザ定義の初期化ファイルが実行されます。 そして，メイン・プログラムのソース言語に合わせて言語固有のパラメータが設定されるとともに， プログラムの実行がメイン・ プログラムの先頭で中断され，コマンドを要求するプロンプトが出されます。

起動の条件についての詳しい説明は，第1.2.3 項と第1.3.1項を参照してください。

# 1.7 実行中のプログラムに割り込みをかけたあとのデバッガの起動

実行中のプログラムは自由にデバッガの制御下に置くことができます。これは， プログラムが無限ループに陥っていると思われるときや，出力が誤っていることに気付いた場合に役立ちます。

プログラムをデバッガの制御下に置くには，次の手順に従ってください。

1. 第1.2節の説明どおりにプログラムをコンパイルおよびリンクしたことを確認する。 また，第1.9節の説明どおりの適切なデバッグ構成を設定したことを確認する。

2. デバッガの制御なしでプログラムを実行するためにDCLコマンドのRUN/NODEBUG program-imageを入力する。

3. 実行中のプログラムに割り込みをかけるためにCtrl/Yを押す。 DCLのコマンド・インタプリタに制御が渡される。

4. デバッガを起動するためにDCLのDEBUGコマンドを入力する。

次に例を示します。

         $ RUN/NODEBUG FORMS
            .
            .
            .
    <Ctrl/Y>

         Interrupt
         $ DEBUG

                    Debugger Banner and Version Number

         Language: C, Module: FORMS
         DBG>

デバッガが起動すると，そのバナーが表示され，ユーザ定義の初期化ファイルが実行されます。 そして，実行が割り込みをかけられた地点のモジュールのソース言語に合わせて言語固有のパラメータが設定され， コマンドを要求するプロンプトが出されます。

どこで実行に割り込みがかけられたか，普通はユーザには分かりません。 実行が一時停止された地点と，呼び出しスタック上のルーチン呼び出しの並びを確認するには，SHOW CALLS コマンドを入力します(SHOW CALLSコマンドについては 第2.3.3項を参照)。

この方法で非保持デバッガを起動した場合は，第1.3.3 項と第1.3.4項でそれぞれ説明したデバッガの再実行機能と実行機能を使用することはできませんのでご注意ください。 デバッガの制御下で同じプログラムを再実行する，または新しいプログラムを実行するには， いったんデバッガを終了してからもう一度起動し直す必要があります。

起動の条件についての詳しい説明は，第1.2.3 項と第1.3.1項を参照してください。

# 1.8 デバッガ・セッションの終了

通常の方法でデバッガ・セッションを終了し，DCLレベルへ戻るには， EXITまたはQUITを入力するか，Ctrl/Zを押します。次に例をあげます。

         DBG> EXIT
         $

QUITコマンドは，ログ・ファイルを閉じるためにデバッガ終了ハンドラを起動し， 画面とキーパッドの状態等をリストアします。

EXITコマンドとCtrl/Zは同じ機能を実行します。これらはQUITコマンドと同じ機能を実行し， さらにプログラムで宣言されている終了ハンドラも実行します。

# 1.9 複数のプロセスのデバッグ構成の設定

デバッガは，1つのプロセス内で実行されるプログラムをデバッグするときの 省略時の構成か，または複数のプロセス内で実行されるプログラムをデバッグするときの マルチプロセス構成のどちらかで起動することができます。 構成は現在のDBG$PROCESS論理名の定義に応じて決まるので， デバッガの起動前にDCLコマンドのSHOW LOGICAL DBG$PROCESSを入力してDBG$PROCESSの定義を確認してください。

- 1つのプロセスの中でだけ実行されるプログラムをデバッグする場合，DBG$PROC ESS の値をDEFAULTにするか，次の例のようにDBG$PROCESS を未定義にしておく必要がある。

           $ SHOW LOGICAL DBG$PROCESS
           %SHOW-S-NOTRAN, no translation for logical name DBG$PROCESS

  省略時の設定ではDBG$PROCESSは未定義である。1つのプロセス内でのみ実行されるプログラムのデバッグ( 典型的なデバッグの場合)には， この設定が適している。

- 複数のプロセス内で実行されるプログラムをデバッグする場合，DBG$PROCESS の値をMULTIPROCESSにする必要がある。

- DBG$PROCESSの値がMULTIPROCESSになっているときに，1つのプロセス内だけで実行されるプログラムをデバッグする場合は， 次のコマンドを入力する。

           $ DEFINE DBG$PROCESS DEFAULT

マルチプロセス・デバッグについての詳しい説明は，第15章を参照してください。

# 1.10 DECwindows Motifを実行しているワークステーションでのプログラムのデバッグ

使用しているワークステーションでDECwindows Motifが動いている場合， 省略時の設定では，デバッガはDECwindows Motifインタフェースで起動されます。 このときにDECwindows Motifインタフェースが表示されるのは， DECwindows Motifのアプリケーション全体に通用するDECW$DISPLAY論理名で指定されたワークステーションです。

DBG$DECW$DISPLAY論理名を使用すると，この省略時の設定を無効にして， デバッガのコマンド・インタフェースをプログラムの入出力(I/O)とともにDECterm ウィンドウに表示することができます。

DECtermウィンドウにデバッガのコマンド・インタフェースを表示するには， 次の手順に従ってください。

1. デバッガの起動元のDECtermウィンドウに次の定義を入力する。

            $ DEFINE/JOB DBG$DECW$DISPLAY " "

   二重引用符の間には1つまたは複数のスペース文字を指定できる。論理名にはなるべくジョブ定義を使用する。 プロセス定義を使用する場合はCONFINE 属性を指定してはならない。

2. 定義を入力したDECtermウィンドウから通常の方法でデバッガを起動する( 第1.3.1項を参照)。そのウィンドウにデバッガのコマンド・ インタフェースが表示される。

次に例を示します。

         $ DEFINE/JOB DBG$DECW$DISPLAY " "
         $ DEBUG/KEEP

                    Debugger Banner and Version Number

         DBG>

これで，第1.3.1項で説明したように， プログラムをデバッガの制御下に置くことができます。 DBG$DECW$DISPLAY論理名とDECW$DISPLAY論理名についての詳しい説明は， 第9.7.3項を参照してください。

DECwindows Motifを実行しているワークステーションでは，OpenVMSデバッガのクライアント/ サーバ構成を使用することもできます。詳しい説明は， 第9.8節を参照してください。

# 1.11 デバッグ・クライアントを実行しているPC からのプログラムのデバッグ

OpenVMSデバッガ・バージョン7.2の機能であるクライアント/サーバ・インタフェースを使用すると， 次に示すオペレーティング・システムを実行しているPC デバッグ・クライアント・インタフェースから，OpenVMS(VAX またはAlpha CPU)上で実行されているプログラムをデバッグすることができます。

- Microsoft Windows 95 (Intel)

- Microsoft Windows NTバージョン3.51以降(IntelまたはAlpha)

OpenVMSクライアント/サーバ構成を使用すると，次のことが可能です。

- 別のOpenVMSシステムから，またはWindows 95かWindows NTバージョン3.51 以降を実行しているPCから，OpenVMSデバッグ・サーバにリモート・ アクセスできる。

- クライアントは同一の，または異なるOpenVMSノード上で実行されている複数のサーバにアクセスできる。

- 教育，またはチームでのデバッグのために，複数のクライアントが同じサーバに同時に接続できる。

- 複数の複合プラットフォーム・システムに分散された多層クライアント/ サーバ・アプリケーションをデバッグできる。

クライアントとサーバは，次のいずれかのトランスポート経由で， Desktop Common Environment/Remote Procedure Calls (DCE/RPC)を使用して通信を行います。

- TCP/IP

- UDP

- DECnet

OpenVMSノード上でサーバを起動するには，次のコマンドを入力します。

         $ DEBUG/SERVER

サーバのネットワーク・バインド文字列が表示されます。DECwindows Motif，またはMicrosoft Windowsクライアントをサーバに接続するときは， この文字列のいずれかを指定する必要があります。例を示します。

    $ DEBUG/SERVER

    %DEBUG-I-SPEAK: TCP/IP: YES, DECnet: YES, UDP: YES
    %DEBUG-I-WATCH: Network Binding: ncacn_ip_tcp:16.32.16.138[1034]
    %DEBUG-I-WATCH: Network Binding: ncacn_dnet_nsp:19.10[RPC224002690001]
    %DEBUG-I-WATCH: Network Binding: ncadg_ip_udp:16.32.16.138[1045]
    %DEBUG-I-AWAIT: Ready for client connection...

クライアントの「Server Connection」ダイアログ・ボックスには， ネットワーク・プロトコル(TCP/IP，DECnet，またはUDP)と， 対応するネットワーク・バインド文字列を入力してください(第9.8.4項を参照)。

注意
  省略時の設定では，サーバを起動したウィンドウに， メッセージとプログラム出力が表示されます。必要に応じて， プログラム出力を別のウィンドウにリダイレクトすることができます。

デバッグ・クライアントの使用方法の詳細については，第11章を参照してください。

# 1.12 CLIなしで動作する切り離されたプロセスのデバッグ

デバッガのDECwindows Motifインタフェースで設計と機能強化を行うとき， デバッグするプロセスにコマンド行インタプリタ(CLI)がなければなりません。( プリント・シンビオントのように)CLIなしで動作する，切り離されたプロセスをデバッグするときは， デバッガに文字セル(画面モード) インタフェースを使用します。

これを行うときは，DBG$INPUT，DBG$OUTPUT，DBG$ERRORを，ログインしていない端末ポートに指定します。 こうすることにより，その端末の標準文字セル・ インタフェースでイメージをデバッグできるようになります。

例を示します。

             $ DEFINE/TABLE=GROUP DBG$INPUT  TTA3:
             $ DEFINE/TABLE=GROUP DBG$OUTPUT TTA3:
             $ DEFINE/TABLE=GROUP DBG$ERROR  TTA3:
             $ START/QUEUE SYS$PRINT /PROCESSOR=dev:[dir]test_program

             [Debugger starts up on logged-out terminal TTA3:]

# 1.13 デバッガ・コマンドの要約

次の各項では，すべてのデバッガ・コマンドおよび関係する機能別のDCL コマンドの一覧を示します。デバッガ・セッションの途中でデバッガのプロンプトでHELP と入力すると，すべてのデバッガ・コマンドとその修飾子についてのオンライン・ ヘルプを参照することができます(第2.1節を参照)。

## 1.13.1 デバッガ・セッションの開始と終了

デバッガを起動するとき，プログラムをデバッガの制御下に置くとき，デバッグ・ セッションに割り込みをかけるとき，またはデバッガ・セッションを終了するときに使用するコマンドを次に示します。DCL のRUNコマンドまたはDCL のDEBUGコマンドと明記されていないコマンドはすべてデバッガ・ コマンドです。

$DEBUG/KEEP | (DCL)デバッガを起動する。
$RUN SYS$SHARE:DEBUGSHR.EXE | (DCL)デバッガを起動する。
RUN filespec | プログラムをデバッガの制御下に置く。
RERUN | 現在デバッガの制御下にあるプログラムを再実行する。
$RUN program-image | (DCL)指定したイメージがLINK/DEBUG でリンクされている場合，デバッガを起動するとともに， そのイメージをデバッガの制御下に置く。この方法でデバッガを起動した場合， そのあとでデバッガのRUNコマンドやRERUNコマンドを使用することはできない。RUN コマンドに/[NO]DEBUG修飾子を使用すると， プログラムの実行時にデバッガを起動するかどうかを制御することができる。
EXIT, Ctrl/Z | 終了ハンドラをすべて実行して，デバッガ・セッションを終了する。
QUIT | プログラム内で宣言されている終了ハンドラを何も実行しないで， デバッガ・セッションを終了する。
Ctrl/C | プログラムの実行またはデバッガ・コマンドを強制終了する。デバッガ・ セッションへの割り込みは行わない。
(SET,SHOW) ABORT_KEY | 省略時のCtrl/C強制終了機能を他のCtrl キー・シーケンスに割り当てる(SET)。現在，強制終了機能に定義されているCtrl キー・シーケンスを表示する(SHOW)。
Ctrl/Y $DEBUG | (DCL)デバッガの制御なしで実行しているプログラムに割り込みをかけてから， デバッガを起動する。
ATTACH | 端末の制御を現在のプロセスから別のプロセスへ移す。
SPAWN | サブプロセスを作成する。 これによってデバッガ・セッションを終了しないで， またデバッグ・コンテキストを失わずに，DCLコマンドを実行することができる。

## 1.13.2 プログラム実行の制御とモニタ

次の各コマンドは，プログラム実行を制御したりモニタしたりするときに使用します。

GO | プログラム実行を開始または再開する。
STEP | 次の行か次の命令まで， または指定した命令までプログラムを実行する。
(SET,SHOW) STEP | STEPコマンドの省略時の修飾子を設定(SET) ，または表示(SHOW)する。
(SET,SHOW,CANCEL) BREAK | ブレークポイントの設定(SET) ，表示(SHOW)，または取り消し(CANCEL)を行う。
(ACTIVATE,DEACTIVATE) BREAK | 以前に設定したブレークポイントを有効(ACTIVATE) ，または無効(DEACTIVATE)にする。
(SET,SHOW,CANCEL) TRACE | トレースポイントの設定(SET)，表示(SHOW)，または取り消し(CANCEL) を行う。
(ACTIVATE,DEACTIVATE) TRACE | 以前に設定したトレースポイントを有効(ACTIVATE) ，または無効(DEACTIVATE)にする。
(SET,SHOW,CANCEL) WATCH | ウォッチポイントの設定(SET) ，表示(SHOW)，または取り消し(CANCEL)を行う。
(ACTIVATE,DEACTIVATE) WATCH | 以前に設定したウォッチポイントを有効(ACTIVATE) ，または無効(DEACTIVATE)にする。
SHOW CALLS | 現在アクティブなルーチン呼び出しを表示する。
SHOW STACK | 現在アクティブなルーチン呼び出しについての補足情報を表示する。
CALL | ルーチンを呼び出す。

## 1.13.3 データの検査と操作

次の各コマンドは，データを検査および操作するときに使用します。

EXAMINE | 変数の値，またはプログラム記憶位置の内容を表示する。
SET MODE [NO]OPERANDS | 命令の検査時に命令オペランドのアドレスと内容を表示するかどうかを制御する。
DEPOSIT | 変数の値，またはプログラム記憶位置の内容を変更する。
EVALUATE | 言語式またはアドレス式を評価する。
MONITOR | デバッガのDECwindows Motifインタフェースにだけ適用される。 変数または言語式の現在の値をDECwindows Motifインタフェースのモニタ・ビューに表示する。

## 1.13.4 型の選択の制御と基数の制御

次の各コマンドは，型の選択と基数を制御するときに使用します。

(SET,SHOW,CANCEL) RADIX | データを入力および表示するときの基数を設定(SET) ，表示(SHOW)，復元(CANCEL)する。
(SET,SHOW,CANCEL) TYPE | コンパイラ生成型に対応していないプログラム記憶位置の型を設定(SET) ，表示(SHOW)，復元(CANCEL)する。
SET MODE [NO]G_FLOAT | 倍精度浮動小数点定数をG浮動小数点数として解釈するかD 浮動小数点数として解釈するかを制御する。

## 1.13.5 シンボル検索とシンボル化の制御

次の各コマンドは，シンボル検索とシンボル化を制御するときに使用します。

SHOW SYMBOL | プログラム内のシンボルを表示する。
(SET,SHOW,CANCEL) MODULE | モジュールのシンボル情報をデバッガのシンボル・テーブルへロードすることによってモジュールを設定する(SET) 。設定されたモジュールの表示(SHOW) ，または取り消し(CANCEL)を行う。
(SET,SHOW,CANCEL) IMAGE | データ構造をデバッガのシンボル・ テーブルにロードすることによって共用可能イメージを設定する(SET) 。設定されたイメージの表示(SHOW)，または取り消し(CANCEL)を行う。
SET MODE [NO]DYNAMIC | デバッガが実行に割り込みをかけるときに，モジュールと共用可能イメージを自動的に設定するかしないかを制御する。
(SET,SHOW,CANCEL) SCOPE | シンボル検索の有効範囲を設定(SET) ，表示(SHOW)，復元(CANCEL)する。
SYMBOLIZE | メモリ・アドレスをシンボリック・ アドレス式に変換する。
SET MODE [NO]LINE | プログラム記憶位置を行番号で表示するか， それともroutine-name + byte offsetで表示するかを制御する。
SET MODE [NO]SYMBOLIC | プログラム記憶位置をシンボルで表示するか， それともアドレス値で表示するかを制御する。

## 1.13.6 ソース・コードの表示

次の各コマンドは，ソース・コードの表示を制御するときに使用します。

TYPE | ソース・コードの行を表示する。
EXAMINE/SOURCE | アドレス式で指定した記憶位置のソース・ コードを表示する。
SEARCH | 指定した文字列をソース・ コードから検索する。
(SET,SHOW) SEARCH | SEARCHコマンドの省略時の修飾子を設定(SET) ，または表示(SHOW)する。
SET STEP [NO]SOURCE | STEPコマンド実行後のソース・コードの表示， またはブレークポイント，トレースポイント，ウォッチポイントでのソース・ コードの表示を有効または無効にする。
(SET,SHOW) MARGINS | ソース・コードを表示するときの左右のマージンを設定(SET) ，または表示(SHOW)する。
(SET,SHOW,CANCEL) SOURCE | ソース・ ディレクトリの検索リストの作成(SET)，表示(SHOW)，または取り消し(CANCEL) を行う。

## 1.13.7 画面モードの使用

次の各コマンドは，画面モードと画面ディスプレイを制御するときに使用します。

SET MODE [NO]SCREEN | 画面モードを有効または無効にする。
DISPLAY | ディスプレイを作成または変更する。
SCROLL | ディスプレイをスクロールする。
EXPAND | ディスプレイを拡大または縮小する。
MOVE | ディスプレイを画面の中で移動する。
(SHOW,CANCEL) DISPLAY | ディスプレイを確認(SHOW) ，または削除(CANCEL)する。
(SET,SHOW,CANCEL) WINDOW | ウィンドウの定義を作成(SET) ，表示(SHOW)，削除(CANCEL)する。
SELECT | ディスプレイ属性に対する表示を選択する。
SHOW SELECT | 各ディスプレイ属性に対して選択されているディスプレイを確認する。
SAVE | ディスプレイの現在の内容を別のディスプレイに保存する。
EXTRACT | ディスプレイまたは現在の画面の状態をファイルに保存する。
(SET,SHOW) TERMINAL | ディスプレイやその他の出力を編集するときにデバッガが使用する端末画面の高さと幅を設定(SET) ，または表示(SHOW) する。
SET MODE [NO]SCROLL | 出力ディスプレイを行ごとに更新するか，それともコマンドごとに一度ずつ更新するかを制御する。
Ctrl/W DISPLAY/REFRESH | 画面を再表示する。

## 1.13.8 ソース・コードの編集

次の各コマンドは，デバッガ・セッションからソースの編集を制御するときに使用します。

EDIT | デバッガ・セッションの途中でエディタを起動する。
(SET,SHOW) EDITOR | EDITコマンドで起動するエディタを設定(SET)， または表示(SHOW)する。

## 1.13.9 シンボルの定義

次の各コマンドは，アドレス，コマンド，値に対する各シンボルを定義または削除するときに使用します。

DEFINE | アドレス，コマンド，または値としてシンボルを定義する。
DELETE | シンボルの定義を削除する。
(SET,SHOW) DEFINE | DEFINEコマンドの省略時の修飾子を設定(SET) ，または表示(SHOW)する。
SHOW SYMBOL/DEFINED | DEFINEコマンドで定義されたシンボルを表示する。

## 1.13.10 キーパッド・モードの使用

次の各コマンドは，キーパッド・モードやキー定義を制御するときに使用します。

SET MODE [NO]KEYPAD | キーパッド・モードを有効または無効にする。
DEFINE /KEY | キー定義を作成する。
DELETE/KEY | キー定義を削除する。
SET KEY | キー定義の状態を設定する。
SHOW KEY | キー定義を表示する。

## 1.13.11 コマンド・プロシージャ， ログ・ファイル，初期化ファイルの使用

次の各コマンドは，コマンド・プロシージャやログ・ファイルとともに使用します。

@ (実行プロシージャ) | コマンド・プロシージャを実行する。
(SET,SHOW) ATSIGN | コマンド・プロシージャを検索するためにデバッガが使用する省略時のファイル指定を設定(SET) ，または表示(SHOW) する。
DECLARE | コマンド・ プロシージャに渡すパラメータを定義する。
(SET,SHOW) LOG | デバッガのログ・ファイルを指定(SET) ，または表示(SHOW)する。
SET OUTPUT [NO]LOG | デバッガ・セッションをログに記録するかどうかを制御する。
SET OUTPUT [NO]SCREEN_LOG | 画面モードにおいて，画面が更新されるときに画面の内容をログに記録するかどうかを制御する。
SET OUTPUT [NO]VERIFY | コマンド・ プロシージャを実行するときにデバッガ・コマンドを表示するかどうかを制御する。
SHOW OUTPUT | SET OUTPUTコマンドで設定した現在の出力オプションを表示する。

## 1.13.12 制御構造の使用

次の各コマンドは，条件やループによるデバッガ・コマンドの制御構造を設定するときに使用します。

FOR | 変数を増分しながらコマンドのリストを実行する。
IF | 条件付きでコマンドのリストを実行する。
REPEAT | 指定した回数だけコマンドのリストを実行する。
WHILE | 条件が真の間だけコマンドのリストを実行する。
EXITLOOP | WHILEループ，REPEATループ，またはFORループを終了する。

## 1.13.13 マルチプロセス・プログラムのデバッグ

次の各コマンドは，マルチプロセス・プログラムをデバッグするときに使用します。 これらのコマンドはマルチプロセス・プログラムに固有のコマンドです。 他のカテゴリに区分したコマンドの中にも，マルチプロセス・ プログラムに固有の修飾子およびパラメータを持つコマンドがあります。 たとえば，SET BREAK/ACTIVATING，EXIT process-spec， DISPLAY/PROCESS=などです。

CONNECT | プロセスをデバッガの制御下に置く。
DEFINE/PROCESS_GROUP | プロセス指定のリストにシンボリック名を割り当てる。
DO | 1つまたは複数のプロセスのコンテキストに従ってコマンドを実行する。
SET MODE [NO]INTERRUPT | あるプロセス内で実行を一時停止しているときに， 他のプロセスの中でその実行に割り込みをかけるかどうかを制御する。
(SET,SHOW) PROCESS | マルチプロセス・デバッグ環境を変更する(SET) 。プロセスの情報を表示する(SHOW)。

## 1.13.14 補助的なコマンド

次のコマンドは，他の目的で使用されます。

HELP | デバッガ・コマンドと，選択されたトピックについてのオンライン・ ヘルプを表示する。
(DISABLE,ENABLE,SHOW) AST | プログラム内でのAST ( 非同期システム・トラップ)の実行要求を禁止(DISABLE) ，または可能(ENABLE)にする。実行要求が可能か， 禁止されているかを表示する(SHOW)。
(SET,SHOW) EVENT_FACILITY | Ada，DECthreads，SCANの各イベントの現在の実行時ファシリティを設定(SET) ，または表示(SHOW)する。
(SET,SHOW) LANGUAGE | 現在の言語を設定(SET) ，または表示(SHOW)する。
SET MODE [NO]SEPARATE | VMSを使用しているワークステーション上でデバッガを使用する場合， デバッガの入出力(I/O)用の別ウィンドウを作成するかどうかを制御する。
SET OUTPUT [NO]TERMINAL | 診断メッセージ以外のデバッガ出力を表示するかどうかを制御する。
SET PROMPT | デバッガのプロンプトを指定する。
(SET,SHOW) TASK | タスキング環境を変更する(SET) 。タスク情報を表示する(SHOW)。
(SET,SHOW) VECTOR_MODE | (VAXのみ) デバッガのベクタ・モード・オプションを有効または無効にする(SET) 。ベクタ化されたプログラムのための現在のベクタ・モード・オプションを表示する(SHOW) 。
SHOW EXIT_ HANDLERS | プログラム内で宣言されている終了ハンドラを表示する。
SHOW MODE | SET MODEコマンドで設定した現在のデバッガのモード(たとえば， 画面モードやステップ・モード)を表示する。
SHOW OUTPUT | SET OUTPUTコマンドで設定した現在の出力オプションを表示する。
SYNCHRONIZE VECTOR_MODE | (VAXのみ)ベクタ化されたプログラムのためにスカラ型プロセッサとベクタ型プロセッサを直ちに同期化させる。

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