日本-日本語 |
|
|
|
OpenVMS マニュアル |
|
HP OpenVMS
|
目次 | 索引 |
本章では,デバッガが持つ次の便利な機能について説明します。
デバッガ・コマンド・プロシージャは,ファイルに記述された一連のコマンドです。デバッガがコマンド・プロシージャを実行するよう指定して,デバッグ・セッションを再作成したり,前のセッションを続行したり,デバッグ・セッションの間に同じデバッガ・コマンドを何度も入力しなくてもすむようにしたりできます。コマンド・プロシージャにはパラメータを引き渡すことができます。
DCL コマンド・プロシージャの場合と同様に,デバッガ・コマンド・プロシージャを実行するには,ファイル指定の先頭にアットマーク (@) を付けます。 @ はプロシージャ実行コマンドです。
デバッガ・コマンド・プロシージャは,デバッガ初期化ファイル ( 第 13.2 節 を参照 ) に指定されているような標準的な設定用デバッガ・コマンドを数多く定期的に実行する場合に特に便利です。また,デバッガ・ログ・ファイルをコマンド・プロシージャとして使用することもできます (
第 13.3 節 を参照 )。
次に示すのは,デバッガ・コマンド・プロシージャBREAK7.COMの例です。
13.1.1 基本的な規則
! ***** デバッガ・コマンド・プロシージャBREAK7.COM ***** SET BREAK/AFTER:3 %LINE 120 DO (EXAMINE K,N,J,X(K); GO) SET BREAK/AFTER:3 %LINE 160 DO (EXAMINE K,N,J,X(K),S; GO) SET BREAK %LINE 90 |
このコマンド・プロシージャをプロシージャ実行コマンド (@) で実行すると,プロシージャ内に記述されたコマンドがその順番に実行されます。
コマンド・プロシージャへのコマンド入力の規則については,デバッガのオンライン・ヘルプを参照してください (HELP Command_Format と入力します )。
コマンド・プロシージャには,パラメータを引き渡すことができます。パラメータ引き渡しの規則については, 第 13.1.2 項 を参照してください。
プロシージャ実行 (@) コマンドは,他のデバッガ・コマンドと同様に入力することができます。すなわち,端末から直接入力したり,別のコマンド・プロシージャ内から入力したり,SET BREAK などのコマンドの DO 句から入力したり,画面表示定義の DO 句から入力したりすることができます。
プロシージャ実行 (@) コマンドに指定するファイル指定が完全ファイル指定ではない場合,デバッガは SYS$DISK:[]DEBUG.COM をコマンド・プロシージャの省略時のファイル指定とみなします。たとえば,現在の省略時のディレクトリにあるコマンド・プロシージャ BREAK7.COM を実行するためには,次のコマンド行を入力します。
DBG> @BREAK7 |
SET ATSIGN コマンドは,省略時のファイル指定である SYS$DISK:[]DEBUG.COM の一部またはすべてのフィールドの変更を可能にします。SHOW ATSIGN コマンドは,コマンド・プロシージャの省略時のファイル指定を表示します。
省略時の設定では,コマンド・プロシージャから読み込まれたコマンドはエコーバックされません。SET OUTPUT VERIFY コマンドを入力すると,コマンド・プロシージャから読み込まれたすべてのコマンドが, DBG$OUTPUT で指定された現在の出力装置にエコーバックされます。省略時の出力装置は SYS$OUTPUT です。コマンド・プロシージャから読み込まれたコマンドがエコーバックされるかどうかを明らかにするには, SHOW OUTPUT コマンドを使用します。
コマンド・プロシージャ内のコマンドを実行した結果,警告かそれ以上の重大な診断メッセージが表示された場合,そのコマンドは強制終了されます。ただしコマンド・プロシージャの実行は次のコマンド行から続けられます。
13.1.2 コマンド・プロシージャへのパラメータの引き渡し
DCL コマンド・プロシージャの場合と同様に,デバッガ・コマンド・プロシージャにもパラメータを引き渡すことができます。ただし,いくつかの点でその方法が異なります。
ここで説明する規則に従って,ユーザはデバッガ・コマンド・プロシージャに対して必要なだけパラメータを引き渡すことができます。パラメータには,アドレス式,コマンド,または現在使用中の言語で記述された値式を指定できます。コマンド文字列は二重引用符(")で囲み,各パラメータはコンマ (,) で区切らなければなりません。
パラメータが引き渡される側のデバッガ・コマンド・プロシージャには,引き渡された実パラメータと,コマンド・プロシージャ内で宣言された仮パラメータ ( シンボル ) とを結び付ける DECLARE コマンド行が必要です。
DECLARE コマンドは,コマンド・プロシージャ内でのみ有効です。 DECLARE コマンドの構文は次のとおりです。
DECLARE p-name:p-kind[, p-name:p-kind[, ...]] |
それぞれの p-name:p-kind の組み合わせは,仮パラメータ (p-name) をパラメータの種類 (p-kind) と関連づけています。有効な p-kind キーワードを次に示します。
ADDRESS | 実パラメータをアドレス式として解釈する |
COMMAND | 実パラメータをコマンドとして解釈する |
VALUE | 実パラメータを現在使用中の言語で記述された値式として解釈する |
次の例は,パラメータがコマンド・プロシージャに引き渡されたとき,どのように処理されるかを示しています。コマンド・プロシージャ EXAM.COM の中の DECLARE K:ADDRESS コマンドは,仮パラメータ K を宣言しています。EXAM.COM に引き渡される実パラメータはアドレス式として解釈されます。EXAMINE K コマンドは,そのアドレス式の値を表示します。SET OUTPUT VERIFY コマンドは,コマンドがデバッガに読み込まれたとき,それらをエコーバックします。
! ***** デバッガ・コマンド・プロシージャEXAM.COM ***** SET OUTPUT VERIFY DECLARE DBG:ADDRESS EXAMINE DBG |
次のコマンド行は,EXAM.COM を実行します。このとき実パラメータ ARR24 を引き渡します。EXAM.COM 内で ARR24 はアドレス式 ( この場合は配列変数 ) として解釈されます。
DBG> @EXAM ARR24 %DEBUG-I-VERIFYIC, entering command procedure EXAM DECLARE DBG:ADDRESS EXAMINE DBG PROG_8\ARR24 (1): Mark A. Hopper (2): Rudy B. Hopper (3): Tim B. Hopper (4): Don C. Hopper (5): Mary D. Hopper (6): Jeff D. Hopper (7): Nancy G. Hopper (8): Barbara H. Hopper (9): Lon H. Hopper (10): Dave H. Hopper (11): Andy J. Hopper (12): Will K. Hopper (13): Art L. Hopper (14): Jack M. Hopper (15): Karen M. Hopper (16): Tracy M. Hopper (17): Wanfang M. Hopper (18): Jeff N. Hopper (19): Nancy O. Hopper (20): Mike R. Hopper (21): Rick T. Hopper (22): Dave W. Hopper (23): Jim W. Hopper (24): Robert Z. Hopper %DEBUG-I-VERIFYIC, exiting command procedure EXAM DBG> |
DECLARE コマンドで指定されたそれぞれの p-name:p-kind の組み合わせは,1 つのパラメータを結び付けます。たとえば1つのコマンド・プロシージャに 5 つのパラメータを引き渡す場合,5 つの対応する p-name:p-kind の組み合わせが必要になります。これらの組み合わせは常に指定した順番に処理されます。
たとえば,次のコマンド・プロシージャ EXAM_GO.COM は,アドレス式 (L) とコマンド文字列 (M) の 2 つのパラメータを受け取ります。その後,アドレス式が調べられ,コマンドが実行されます。
! ***** デバッガ・コマンド・プロシージャEXAM_GO.COM ***** DECLARE L:ADDRESS, M:COMMAND EXAMINE L; M |
次の例は,検査対象の変数 X,実行対象のコマンド @DUMP.COM を渡す EXAM_GO.COM の実行方法を示しています。
DBG> @EXAM_GO X, "@DUMP" |
組み込みシンボル %PARCNT は,コマンド・プロシージャ内だけで使用できるものであり,コマンド・プロシージャへさまざまな個数のパラメータを引き渡せるようにします。%PARCNT の値は,コマンド・プロシージャへ引き渡す実パラメータの個数を示します。
次の例では,組み込みシンボル %PARCNT が使用されています。コマンド・プロシージャ VAR.DBG には,次の行が含まれています。
! ***** デバッガ・コマンド・プロシージャVAR.DBG ***** SET OUTPUT VERIFY ! 引き渡されるパラメータの個数を表示する。 EVALUATE %PARCNT ! 引き渡されたパラメータをすべて結合して値を取得するまでループする。 FOR I = 1 TO %PARCNT DO (DECLARE X:VALUE; EVALUATE X) |
次のコマンド行は,VAR.DBG にパラメータ 12,37,45 を引き渡して実行します。
DBG> @VAR.DBG 12,37,45 %DEBUG-I-VERIFYIC, entering command procedure VAR.DBG ! 引き渡されるパラメータの個数を表示する。 EVALUATE %PARCNT 3 ! 引き渡されたパラメータをすべて結合して, ! 値を取得するまでループする。 FOR I = 1 TO %PARCNT DO (DECLARE X:VALUE; EVALUATE X) 12 37 45 %DEBUG-I-VERIFYIC, exiting command procedure VAR.DBG DBG> |
VAR.DBG が実行されるとき,%PARCNT の値は 3 です。したがって, VAR.DBG 内の FOR ループは 3 回繰り返されます。FOR ループでは, DECLARE コマンドが 3 つの各実パラメータ (12 が最初 ) を新しい宣言 X に結び付けます。それぞれの実パラメータは,現在使用中の言語の値式として解釈され,EVALUATE X コマンドがその値を表示します。
13.2 デバッガ初期化ファイルの使用
デバッガ初期化ファイルはコマンド・プロシージャであり,論理名 DBG$INIT が付けられています。このファイルはデバッガの起動時に自動的に実行されます。デバッガを起動するたびにファイル内に記述されたコマンドが自動的に実行されます。
初期化ファイルには,デバッグ環境を整えるため,またはユーザ・プログラムが毎回の実行時にあらかじめ決められた方法で実行されるよう制御するために,デバッグ・セッションを開始するときに必ず入力しなければならないコマンド行が含まれています。
たとえば,ファイル DEBUG_START4.COM に次のコマンドが含まれているとします。
! ***** デバッガ初期化ファイルDEBUG_START4.COM ***** ! デバッグ・セッションを省略時のログ・ファイル(SYS$DISK:[]DEBUG.LOG)に記 録する。 SET OUTPUT LOG ! ! コマンド・プロシージャから読み込まれたコマンドをエコーバックする。 SET OUTPUT VERIFY ! ! ソース・ファイルが現在の省略時ディレクトリにない場合は[SMITH.SHARE]を 使用する。 SET SOURCE [],[SMITH.SHARE] ! ! 画面モードを起動する。 SET MODE SCREEN ! ! シンボルSBをSET BREAKコマンドとして定義する。 DEFINE/COMMAND SB = "SET BREAK" ! ! SHOW MODULE *コマンドをKP7に割り当てる。 DEFINE/KEY/TERMINATE KP7 "SHOW MODULE *" |
このファイルをデバッガ初期化ファイルにするには,DCLのDEFINE コマンドを使用します。次に例を示します。
$ DEFINE DBG$INIT WORK:[JONES.DBGCOMFILES]DEBUG_START4.COM |
デバッガ・ログ・ファイルは,デバッグ・セッションの履歴を記録します。デバッグ・セッションの間に,入力された各コマンドとその結果のデバッガの出力がファイルに保存されます。次にデバッガ・ログ・ファイルの例を示します。
SHOW OUTPUT !noverify, terminal, noscreen_log, logging to DSK2:[JONES.P7]DEBUG.LOG;1 SET STEP NOSOURCE SET TRACE %LINE 30 SET BREAK %LINE 60 SHOW TRACE !tracepoint at PROG4\%LINE 30 GO !trace at PROG4\%LINE 30 !break at PROG4\%LINE 60 . . . |
DBG> プロンプトは記録されず,デバッガの出力内容は感嘆符が付けられてコメントになるので,ファイルは修正なしでデバッガ・コマンド・プロシージャとして使用することができます。したがって,長いデバッグ・セッションに割り込みがかかったとき,ログ・ファイルを他のデバッガ・コマンド・プロシージャと同じように実行することができます。ログ・ファイルを実行すると,前回中断したところまでデバッグ・セッションが復元されます。
デバッガ・ログ・ファイルを作成するには,SET OUTPUT LOG コマンドを使用します。省略時には,デバッガはログを SYS$DISK:[]DEBUG.LOG に書き込みます。デバッガ・ログ・ファイルに名前を付けるには, SET LOG コマンドを使用します。省略時のファイル指定のどのフィールドでも上書きすることができます。たとえば,次のコマンドを入力すると,その後デバッガはセッションをファイル [JONES.WORK2]MONITOR.LOG に記録します。
DBG> SET LOG [JONES.WORK2]MONITOR DBG> SET OUTPUT LOG |
SET OUTPUT LOG コマンドをデバッガ初期化ファイルに入力する場合もあります。 第 13.2 節 を参照してください。
SHOW LOG コマンドは,デバッガがログ・ファイルに書き込みを行っているかどうかを報告し,現在のログ・ファイルを示します。 SHOW OUTPUT コマンドは,現在の出力オプションをすべて示します。
画面モードでデバッグしているとき,SET OUTPUT SCREEN_LOG コマンドを使用して画面の内容を更新される様子そのままに記録することができます。このコマンドを使用するには,デバッグ・セッションのログがすでに記録中になっていなければなりません。すなわち,SET OUTPUT SCREEN_LOGコマンドは,SET OUTPUT LOG コマンドを入力したあとでだけ有効になります。SET OUTPUT SCREEN_LOG コマンドで画面情報を保存すると大きなログ・ファイルが作成されるため,長いデバッグ・セッションで使用することは望ましくありません。画面モードの情報を保存するその他の方法については,SAVE コマンドおよび EXTRACT コマンドの説明を参照してください。
ログ・ファイルをコマンド・プロシージャとして使用するときは,まず SET OUT PUT VERIFY コマンドを入力して,読み込まれたデバッガ・コマンドをエコーバックするようにしなければなりません。
13.4 コマンド,アドレス式,値の各シンボルの定義
DEFINE コマンドは,長かったり,繰り返し使用されたりするコマンド・シーケンスやアドレス式のシンボルを作成したり,言語式の値をシンボルに格納したりするために使用します。
定義したいシンボルの種類は,DEFINE コマンドに使用するコマンド修飾子 (/COMMAND,/ADDRESS,または /VALUE) で指定します。省略時の修飾子は /ADDRESS です。いくつかの DEFINE コマンドで同じ修飾子を使用する場合は,最初に SET DEFINE コマンドを使用して省略時の修飾子を新しく設定することができます。たとえば, SET DEFINE COMMAND は,DEFINE コマンドを DEFINE/COMMAND として動作するように設定します。SHOW DEFINE コマンドは,現在有効な省略時の修飾子を示します。
SHOW SYMBOL/DEFINED コマンドは,DEFINE コマンドで定義したシンボルを示すために使用します。SHOW SYMBOL コマンドに /DEFINED 修飾子を付けないと,ユーザ・プログラム内で定義されたルーチン名や変数名などのシンボルだけを示すので注意してください。
DELETE コマンドは,DEFINE コマンドで作成されたシンボルの定義を削除するために使用します。
コマンド・プロシージャ内でシンボルを定義する場合,/LOCAL修飾子を使用してシンボルの定義をそのコマンド・プロシージャ内だけに制限することができます。
DEFINE/COMMANDコマンドは,1つまたは複数のコマンド文字列をより短いシンボルに等しいと定義するために使用します。基本的な構文を次の例に示します。
13.4.1 コマンドのシンボルの定義
DBG> DEFINE/COMMAND SB = "SET BREAK" DBG> SB PARSER |
この例では,DEFINE/COMMANDコマンドはシンボルSBが文字列SET BREAKに等しいと定義します。コマンド文字列を区切るために二重引用符が使用されていることに注意してください。コマンド行SB PARSERが実行されると,デバッガはシンボルSBを文字列SET BREAKに置き換え,SET BREAKコマンドを実行します。
次の例では,DEFINE/COMMANDコマンドは,シンボルBTを SHOW BREAKコマンドとそれに続くSHOW TRACEコマンドからなる文字列に等しいと定義しています。複数のコマンドを指定する文字列では,コマンド間にセミコロンを挿入して区切ります。
DBG> DEFINE/COMMAND BT = "SHOW BREAK;SHOW TRACE" |
SHOW SYMBOL/DEFINEDコマンドは,シンボルBTを次のように示します。
DBG> SHOW SYM/DEFINED BT defined BT bound to: "SHOW BREAK;SHOW TRACE" was defined /command DBG> |
複雑なコマンドを定義するために,コマンド・プロシージャにパラメータを付けて使用しなければならない場合があります。コマンド・プロシージャへのパラメータの引き渡しについては, 第 13.1.2 項 を参照してください。次に例を示します。
DBG> DEFINE/COMMAND DUMP = "@DUMP_PROG2.COM" |
目次 | 索引 |
|