HP OpenVMS Systems Documentation |
| 前へ | 次へ | 目次 | 索引 |
本章では OpenVMS デバッガのコマンド・インタフェースについて説明します。本章には次の内容が含まれています。
基本的なデバッグ・タスクについては,
第 2 章 を参照してください。
1.1 デバッガの概要
OpenVMS デバッガは,実行時のプログラミング・エラーや論理エラーなどのバグの場所をつきとめるためのツールです。コンパイルとリンクには成功しても正常に実行されないプログラムに対してデバッガを使用します。このようなプログラムは,たとえば,不正な出力を行ったり,無限ループに陥ったり,途中で終了してしまいます。
OpenVMS デバッガを使用すると,プログラムを実行しながら会話形式でプログラムの動作をモニタし,操作することにより,プログラムのエラーを見つけることができます。デバッガ・コマンドを使用すると,次のことが可能です。
以上が基本的なデバッグ方法です。プログラム内のエラーを特定することができれば,ソース・コードを編集,コンパイル,リンクして,修正バージョンを実行することができます。
デバッガとそのドキュメントを使用していくうちに,デバッグには基本的な方法以外にさまざまな方法もあることが分かります。また,ユーザのニーズに合わせてデバッガをカスタマイズすることもできます。 第 1.1.1 項 では,OpenVMS デバッガの機能の概要を説明します。
1.1.1 デバッガの機能
VAX プロセッサでデバッガを使用する場合,次の各 VAX 言語で記述されたプログラムをデバッグすることができます。
| Ada | BASIC | BLISS | C |
| C++ | COBOL | DIBOL | Fortran |
| MACRO-32 | Pascal | PL/I | RPG II |
| SCAN |
Alpha プロセッサでデバッガを使用する場合,次の各 Compaq 言語で記述されたプログラムをデバッグすることができます。
| Ada | BASIC | BLISS | C |
| C++ | COBOL | Fortran | MACRO-32 1 |
| MACRO-64 | Pascal | PL/I |
I64 でデバッガを使用する場合,次の各 Compaq 言語で記述されたプログラムをデバッグすることができます。
| Assembler (IAS) | BASIC | BLISS | C |
| C++ | COBOL | Fortran | MACRO-32 1 |
| IMACRO | PASCAL | ||
| Assembler (IAS) | BASIC | BLISS | C |
| C++ | COBOL | Fortran | MACRO-32 1 |
| IMACRO | PASCAL |
デバッガは,サポートされている言語の構文,データ型,演算子,式,有効範囲規則,その他の構造を認識します。 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 コマンドを使用すると,プロセスの情報を表示したり,個々のプロセス内のイメージの実行を制御したりすることができます。
マルチスレッド・プログラムとも呼ばれるタスキング・プログラムをデバッグすることができます。これらのプログラムは,Compaq POSIX Threads Library サービスや POSIX 1003.1bサービス,または各言語固有のタスキング・サービス ( たとえば Ada のタスキング・プログラム ) を使用します。 SHOW TASK コマンドや SET TASK コマンドを使用すると,タスクの情報を表示したり,個々のタスクの実行を制御したりすることができます。
VAX プロセッサでは,ベクタ化されたプログラム,つまり VAX ベクタ命令を使用するプログラムをデバッグすることができます。ベクタ命令レベルでの実行の制御とモニタ,ベクタ命令の検査と格納,ベクタ・レジスタの内容の操作,特定のベクタ要素を表示するためのマスクの使用,およびスカラ型プロセッサとベクタ型プロセッサの間の同期の制御などを行うことができます。ベクタ化されたプログラムのデバッグについては,『OpenVMS デバッガ説明書 (Version 7.2)』を参照してください。
すべての VT シリーズ端末と VAX ワークステーションがサポートされています。
1.1.2 便利な機能
オンライン・ヘルプは,デバッガ・セッションの途中でいつでも利用することができます。オンライン・ヘルプには,すべてのデバッガ・コマンドについての情報と,選ばれたトピックについての情報が含まれています。
デバッガ・セッションでは,OpenVMS デバッガでサポートされる言語で作成されたプログラム・モジュールのソース・コードを表示できます。
画面モード では,ウィンドウにいろいろな情報を表示したり,取り込んだりすることができます。このウィンドウは,画面内で移動したりサイズを変更したりできるスクロール可能なウィンドウです。自動的に更新されるディスプレイでリース,命令,レジスタをそれぞれ見ることができます。デバッガの入出力 (I/O) や診断メッセージを表示するよう選択することもできます。また,特定のコマンド・シーケンスの出力を取り込むディスプレイ・ユニットを作成することもできます。
保持デバッガ (kept debugger) でデバッガを実行すると,現在のデバッガ・セッションの内部から別のプログラム・イメージを実行したり,同じイメージを再実行することができ,そのためにデバッガを終了して再起動する必要はありません。プログラムを再実行する場合には,大部分のトレースポイントやウォッチポイントをはじめ,前に設定したブレークポイントを保持するのか,取り消すのかを選択できます。
OpenVMS デバッガには,オプションとして HP DECwindows Motif for OpenVMS グラフィカル・ユーザ・インタフェース (GUI) があり,プッシュ・ボタン,プルダウン・メニュー,ポップアップ・メニューを使用して,共通のデバッガ・コマンドにアクセスできます。GUI はオプションとして使用できるデバッガ・コマンド行インタフェースの拡張機能であり, DECwindows Motif を実行しているワークステーションで使用できます。 GUI を使用すると,DECwindows Motif 環境で関連するすべてのデバッガ・コマンドにコマンド行から完全にアクセスできます。
OpenVMS デバッガには,オプションとしてクライアント/サーバ構成があり,ユーザの Microsoft オペレーティング・システムを実行している PC からデバッガにアクセスして,その機能を使用することができます。このデバッガは,OpenVMS (VAX,Alpha,または I64 CPU) 上で実行されるデバッグ・サーバと,Microsoft オペレーティング・システム (Intel または Alpha CPU) 上で実行されるデバッグ・クライアント・インタフェースで運用します。
クライアント/サーバ構成により,DECwindows Motif ユーザ・インタフェースを使用している OpenVMS ノードから,あるいは Microsoft Windows インタフェースを使用している PC から,特定の OpenVMS ノード上でリモートに実行しているプログラムをデバッグすることができます。多くのデバッグ・オプションを可能とする同一デバッグ・サーバに対して,同時に最大 31 のデバッグ・クライアントがアクセスすることができます。
デバッガの起動時には,よく使用されるいくつかのデバッガ・コマンド・シーケンスが省略時の設定により数値キーパッドのキーに割り当てられます (VT52,VT100,または LK201 のキーボードを使用している場合 )。そのため,キーボードでコマンドを入力するよりも少ないキーストロークでこれらのコマンドを入力することができます。また,ユーザが独自のキー定義を作成することもできます。
デバッガ・セッションの途中でエラーを見つけたときに EDIT コマンドを使用すると,各自のシステムで使用可能なエディタを使用することができます。使用するエディタは SET EDITOR コマンドで設定します。ランゲージ・センシティブ・エディタ (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 節 を参照してください。
| 前へ | 次へ | 目次 | 索引 |