12.2 オペランドの指定方法
- 〈この節の構成〉
(1) ソース要素の名称
(a) 外部プログラム名と内部プログラム名
外部プログラム名は,プログラム定義の最外のプログラムである外部プログラムのプログラム名段落(PROGRAM-ID)で指定した名称です。内部プログラム名は,内部プログラムのプログラム名段落(PROGRAM-ID)で指定した名称です。記述規則は,COBOLの言語仕様に従って,変換規則も適用します。変換後の名称をTDコマンドのオペランドに指定できます。
(2) 行番号(=一連番号)
原始プログラムの一連番号領域に記述してある番号です。原始プログラムの一連番号領域に番号の記述がない場合,順序が昇順でない場合,または自由形式正書法の場合は,コンパイラが自動的に振り直す番号が行番号となります。
(6) データ名
テストデバッグで指定できるCOBOL言語のデータは次のとおりです。
-
データ名
-
指標名
-
アドレス名
-
特殊レジスタ
データ名は,COBOL言語の仕様に準拠した形で,修飾,添字付けおよび部分参照の指定ができます。COBOL言語との指定方法の違いは次のとおりです。
(a) 表の参照
表の属性を持つデータ名を参照するときは,添字を付けて指定します。添字は,整数定数,添字の付かない数字項目,指標名の指定ができます。ただし,データ監視条件では,整数定数でなければなりません。
次の項目は,添字に指定できません。
-
ALL
-
算術式(相対添字付け)
-
ほかの表に割り当てた指標名
(b) 部分参照
データの部分を参照するときは,最左端位置と長さを指定します。最左端位置と長さは,整数定数を指定します。部分参照には,次の制限があります。
-
最左端位置と長さに,算術式は指定できません。
-
添字付けの範囲指定と部分参照は同時に指定できません。
- 注意事項
-
-
報告書節のデータ項目および画面節(SCREEN SECTION)の画面名は参照できません。
-
最適化オプション(-Optimize,2)でコンパイルしたソース要素をテストデバッグするときは,最適化されたデータ項目を参照できないことがあります。
-
TYPEDEF句の付いたデータ項目およびその下位項目のデータ項目は参照できません。
-
DISPLAY OBJECTコマンド,DISPLAY FACTORYコマンドによって,オブジェクトまたはファクトリオブジェクト内に定義されている表を参照するときの添字の指定は,整数定数でなければなりません。
-
(7) 定数
テストデバッガで使用できる定数には,COBOLの言語仕様に準拠した形式と,拡張16進定数があります。COBOLの言語仕様に準拠した形式では,次の定数を代入,比較で使用できます。
(a) COBOL言語の仕様に準拠した定数
記号文字・定数名は使用できません。ALLは,英数字定数・ブール定数・日本語文字定数・表意定数に指定できます。
定数を囲む一対の区切り記号には,アポストロフィ(')またはダブルコーテーション(")が使用できます。区切り記号としてアポストロフィ(')またはダブルコーテーション(")を使用する場合の指定方法については「12.1 TDコマンドの指定方法」を参照してください。
(b) 拡張16進定数
#Xで始まり,一対のアポストロフィ(')またはダブルコーテーション(")で囲んだ0〜9,A〜Fの文字列です。文字数は,2の倍数で,160文字までの長さです。ALLによる定数の繰り返しも指定できます。
拡張16進定数は,COBOL2002の定数で代入,比較ができないデータ項目にも,代入,比較ができます。代入,比較の規則の詳細については,「9.3.1 データの比較・代入規則」の「(1) データの代入規則」,「(2) データの比較規則」を参照してください。
- 構文規則
〔ALL〕 #X' ・・・・ ' 〔ALL〕 #X" ・・・・ "
- 使用例
#X'313233' ALL #X'FF'
(9) オペランドの補助語
オペランドの内容を指定するときに,補助語を使用します。補助語の先頭にはシャープ(#)が付きます。オペランドの補助語を次に示します。
補助語 |
内容 |
---|---|
#ENTRY |
ソース要素の入口を指定します。 |
#EXIT |
ソース要素の出口を指定します。 |
#PROGRAM |
プログラム名を指定します。 |
#CLASS |
クラス名を指定します。 |
#FACTORY |
ファクトリオブジェクトを示します。 |
#OBJECT |
インスタンスオブジェクトを示します。 |
#FUNCTION |
利用者定義関数名を指定します。 |
#ALL |
すべてという意味で指定します。 |
#> |
参照するオブジェクトの特定のデータ名を示します。 |
#LASTCODE |
直前のASSIGN CASECODEコマンドで設定した値を示します。 |
(10) TD利用者定義語
利用者が任意に指定する語です。先頭が英字で始まる英数字で,長さは31バイト以内です。
種類 |
用途 |
---|---|
カウンタ変数 |
TDコマンド群の実行回数をカウントします。 |
記号名 |
シミュレーションでデータ名を識別します。 |
監視識別子 |
データ条件中断の設定を識別します。 |
ケース識別子 |
テストケースを識別します。 |
TD利用者定義語は,TDコマンドで使用するCOBOL2002の予約語(OF,IN,WITHなど)と同じ名称を指定できません。
(11) 翻訳単位指定
翻訳単位を特定します。
翻訳単位指定が指定されていない場合は,次の順で翻訳単位指定を仮定します。SET QUALIFICATIONコマンドの詳細については,「12.4 TDコマンドの詳細」の「(23) SET QUALIFICATION/RESET QUALIFICATION(翻訳単位・ソース要素の指定と解除)」の「(a) SET QUALIFICATION(翻訳単位・ソース要素の指定)」を参照してください。
-
プログラムの起動前
-
事前に実行されたSET QUALIFICATIONコマンドで指定した翻訳単位指定
-
-Mainコンパイラオプションでコンパイルされた翻訳単位
-Mainコンパイラオプションでコンパイルされた翻訳単位がない場合は,翻訳単位指定または事前にSET QUALIFICATIONコマンドを実行しなければなりません。
-
-
プログラムの中断状態
-
事前に実行されたSET QUALIFICATIONコマンドで指定した翻訳単位指定
-
バックトレース実行中で,現在表示されている翻訳単位
-
現在中断している翻訳単位
-
(12) ソース要素指定
ソース要素を特定します。
ソース要素指定が指定されていない場合は,次の順でソース要素指定を仮定します。
SET QUALIFICATIONコマンドの詳細については,「12.4 TDコマンドの詳細」の「(23) SET QUALIFICATION/RESET QUALIFICATION(翻訳単位・ソース要素の指定と解除)」の「(a) SET QUALIFICATION(翻訳単位・ソース要素の指定)」を参照してください。
-
プログラムの起動前
-
事前に実行されたSET QUALIFICATIONコマンドで指定したソース要素指定
-
-Mainコンパイラオプションでコンパイルされた翻訳単位の外部プログラム
-Mainコンパイラオプションでコンパイルされた翻訳単位がない場合は,ソース要素指定または事前にSET QUALIFICATIONコマンドを指定しなければなりません。
-
-
プログラムの中断状態
-
事前に実行されたSET QUALIFICATIONコマンドで指定したソース要素指定
-
バックトレース実行中で,現在表示されているソース要素
-
中断状態のソース要素
-
プログラム定義のソース要素を指定します。
- 形式
クラス定義のソース要素を特定します。
- 形式
関数を指定します。
- 形式
(15) 入口,出口指定
ソース要素の入口,出口を指定します。ソース要素の入口とはソース要素の最初の文を実行する前の状態です。ソース要素の出口とはソース要素の最後の文を実行したあとの状態です。
ソース要素の入口を#ENTRY,ソース要素の出口を#EXITで表します。
- 形式
- 使用例
#ENTRY *> 入口 #PROGRAM(A/A)#ENTRY *> 外部プログラムAの入口 #EXIT *> 出口 #PROGRAM(A/B)#EXIT *> 外部プログラムAに属する *> 内部プログラムBの出口
- 注意事項
-
ソース要素指定をするとき,次の指定はできません。
#CLASS(クラス名/#FACTORY) #CLASS(クラス名/#OBJECT)
(18) TDコマンド群
一つにまとまった処理をするためのTDコマンドの集まりをTDコマンド群として指定できます。TDコマンド群は,次のTDコマンドで指定できます。
-
SET BREAKコマンド,SET WATCHコマンドで,中断時に実行するコマンド
-
IFコマンドで,成立または不成立時に実行するコマンド
-
シミュレーションの手続き
-
TESTコマンドのテストケース
- 使用例
SET BREAK STATEMENT(100) DO DISPLAY DATA(品名) SET BREAK STATEMENT(500) DO *> ネスト DISPLAY DATA(番号) ENDDO ENDDO
データ監視条件の設定,または中断点の設定による中断が一つの文で同時に成立したときは,次の順番でTDコマンド群が実行されます。
-
「データ監視条件の設定」のTDコマンド群
-
「中断点の設定」のTDコマンド群
さらに,データ監視条件の設定によって,一つの文で複数のデータ監視条件が同時に成立したときは,監視識別子の昇順にTDコマンド群が実行されます。
- 使用例
-
次のTDコマンドを実行し,一つの文で同時に中断が成立すると,「データ監視の設定(SET WATCH(DATAA))」「データ監視の設定(SET WATCH(WORK))」「中断点の設定」の順番でTDコマンド群が実行されます。
- TDコマンド群
SET BREAK STATEMENT(5000) *> 中断点の設定 DO DISPLAY COMMENT("TEST#1 OK!") ENDDO SET WATCH(WORK) CONDITION(WORK NOT = 0) *> データ監視の設定(1) DO DISPLAY DATA(WORK) ENDDO SET WATCH(DATAA) CONDITION(DATAA NOT = 0) *> データ監視の設定(2) DO DISPLAY DATA(DATAA) ENDDO
- 実行結果
次の,プログラムを続行するTDコマンドをTDコマンド群に指定すると,プログラムの実行が再開されてしまうために,それ以降のTDコマンドは実行されません。TDコマンド群が複数ある場合,最初に実行されるTDコマンド群にプログラムを続行するTDコマンドが指定されていたときは,それ以降のTDコマンド群は実行されません。
-
GO
-
STEP IN
-
STEP OVER
-
STOP
TDコマンド群が実行されなかったとき,カウンタ変数は加算されません。中断点を設定したときのスキップ回数のカウントは加算されます。
- 使用例
-
次のTDコマンドを実行した結果,文番号6000で比較条件式A = 50が成立したとします。SET WATCHコマンドで指定されたTDコマンド群が実行され,GOコマンドによってプログラムが続行されます。SET BREAKコマンドで指定された無条件中断のTDコマンド群のDISPLAY DATAコマンドは実行されません。カウンタ変数Cの値も変化しません。
SET WATCH(WATCH50) CONDITION(A = 50) DO GO ENDDO SET BREAK STATEMENT(6000) COUNTER(C) DO DISPLAY DATA(B) ENDDO
- 注意事項
-
-
「データ監視条件の設定」と「中断点の設定」が成立しても,TDコマンド群でプログラムを続行するコマンドが実行されたときは,入力待ちにならないで,実行が継続されます。
-
ステップイン,ステップオーバーまたはジャンプで中断した文で,同時に「データ監視条件の設定」と「中断点の設定」が成立しても,TDコマンド群は一切実行しません。
-
中断点のスキップ回数は,TDコマンド群の実行には関係なく,中断点を通過した場合には必ず更新されます。
-
中断点に達した場合のメッセージおよびデータ監視条件が成立した場合のメッセージは,TDコマンド群の実行に関係なく表示されます。
-
GUIモードでは,TDコマンド群の実行を強制的に中止できます。コマンド実行中に割り込みを指示した場合は,その時点で実行しているTDコマンド以降のコマンドは実行されないで中断します。
-
シミュレーション手続きの場合は,シミュレーション対象入出力文の次の文でプログラムが中断します。
-
(19) カウンタ変数
カウンタ変数は,TDコマンド群の実行回数を参照するための変数です。カウンタ変数を定義したTDコマンド群の中でだけ参照できます。2進項目のデータとして扱われ,1から始まり,TDコマンド群が実行されるたびに1ずつ加算されます。最大値は2,147,483,647で,最大値を超えた場合は,最大値のまま更新されません。
カウンタ変数は,表示,代入,比較に使用できます。ただし,添字・部分参照には使用できません。
-
表示
2進項目のデータ属性,または16進で表示できます。
-
代入
送り出し側作用対象に指定して,データ項目へ値を代入できます。このとき,2進項目の代入規則に従います。カウンタ変数へ値を代入することはできません。
代入については,「9.3.1 データの比較・代入規則」の「(1) データの代入規則」を参照してください。
-
比較
2進項目の比較規則に従い,データ項目,定数と比較できます。
比較については,「9.3.1 データの比較・代入規則」の「(2) データの比較規則」を参照してください。
TDコマンド群が実行される場合,カウンタ変数と同じ名前のデータ名が参照範囲にあるときは,カウンタ変数が指定できるオペランドであれば,カウンタ変数とみなします。カウンタ変数が指定できないオペランドであれば,データ名とみなします。
- 使用例
-
カウンタ変数によって,実行されるTDコマンドを変えます。
SET QUALIFICATION (#PROG (給与計算)) SET BREAK ST(1350) COUNTER(CNT) DO IF C (CNT = 1) DISPLAY DATA(合計) *> 一度目に実行される ENDIF IF C (CNT = 2) DISPLAY DATA(総合計) *> 二度目に実行される ENDIF ENDDO
(20) 記号名
記号名は,副プログラムシミュレーション・ファイルシミュレーションのために定義する名前です。記号名については,「9.2.7 プログラムの単体テスト」の「(4) 記号名」を参照してください。
カウンタ変数と同じ名前は指定できません。ソース要素中のデータ名と同じ名前を記号名として定義したときは,記号名とみなします。記号名に対応するデータ名が表の場合は,添字を必要とします。部分参照できるデータ名であれば,部分参照の指定ができます。
- 使用例
-
ファイルシミュレーションのレコード定義に記号名を割り当てます。
SIMULATE FILE(OUTPUT-FILE) OPENMODE(OUTPUT) RECORD(SYMBOL1) DEFINE 01 SYMBOL1 02 SYMBOL11 03 SYMBOL111 ENDDEFINE DISPLAY DATA (SYMBOL111(1, J)(1:5)) ENDSIMULATE
(21) 繰り返し指定
次のシミュレーションで,反復回数とTDコマンド群を指定します。「12.4 TDコマンドの詳細」の「(17) REPEAT(繰り返し指定)」を参照してください。
-
副プログラムシミュレーションで副プログラムが呼ばれる
-
ファイルシミュレーション入出力文が実行される
-
DCシミュレーションでDC文が実行される
繰り返し指定の使用例については,「9.2.7 プログラムの単体テスト」の「(3) ファイルシミュレーション」の「(a) ファイル入出力文のシミュレーション」の使用例2を参照してください。
繰り返し指定を複数記述することで,シミュレーションが行われるごとに実行されるTDコマンド群を変更できます。反復回数分のシミュレーションでTDコマンドを実行されると,次のシミュレーションから次の繰り返し指定のTDコマンド群が実行されます。すべての繰り返し指定を実行したあとに,シミュレーションが実行されるときは,最後の繰り返し指定のTDコマンド群を実行します。
(22) 入出力文選択指定
シミュレーションする次の入出力文に対応させて,ファイルシミュレーションの手続きを実行させます。「12.4 TDコマンドの詳細」の「(18) SELECT ACTION(入出力文選択指定)」を参照してください。
使用例については「9.2.7 プログラムの単体テスト」の「(3) ファイルシミュレーション」の「(a) ファイル入出力文のシミュレーション」の使用例3を参照してください。
-
READ
-
WRITE
-
REWRITE
-
START
-
DELETE
(24) OLEプロパティ指定
OLEプロパティを特定します。
- 形式
- オペランドの詳細
-
-
データ名指定1
OLEプロパティの名称が設定された英字項目,英数字項目,日本語項目または集団項目を指定します。
-
定数
OLEプロパティの名称を指定する英数字定数,または日本語定数を指定します。
-
データ名指定2
OLEオブジェクト参照データ項目のデータ名を指定します。
-
- 注意事項
-
データ名指定1およびデータ名指定2には,添字の範囲指定はできません。
- 使用例
'Caption' WITH OLE-OBJ1 *> OLE-OBJ1のOLEオブジェクトに属するOLEプロパティ'Caption' PROP1 WITH OLE-OBJ2 *> OLE-OBJ2のOLEオブジェクトに属し *> データ名PROP1に設定された名称のOLEプロパティ