9.2.1 プログラムの中断
テスト中のプログラムの実行を任意に中断させることができます。中断させた状態で,次の操作をし,プログラムを調査できます。
-
データの値を表示,変更する。
-
プログラムの実行経路を表示する。
プログラムを中断させるには,次の方法があります。
-
中断点を設定する。
-
データ監視条件を設定する。
-
割り込みによる中断をする。
また,GUIモードでは,次の場合にもプログラムを中断させます。
-
プログラムで実行時エラーが発生した。
(1) 中断点の設定による中断
プログラムの実行を,任意の個所で中断させるには,中断点を設定します。中断点を設定すると,実行中のプログラムが中断点に達したときに,中断状態になります。中断中は,中断状態で実行できるTDコマンドだけを指定できます。処理が繰り返し実行されるような個所に中断点を設定する場合は,スキップ回数を指定できます。この指定によって,不要な中断回数を減らすことができ,効率良くプログラムをテストできます。
設定した中断点は,一時的に無効な状態にできます。無効な状態の中断点では,プログラムは中断しません。中断点の有効・無効をすばやく切り替えながらテストデバッグできます。設定した中断点は,一覧を表示して確認できます。中断点の一覧表示については,「10.8.3 中断点一覧の表示」を参照してください。
GUIモードの場合,[中断]メニューから[中断点の設定/解除]を選ぶと,中断点が設定できます。設定した中断点に達したときに,プログラムが中断します。GUIモードでの中断点設定の詳細については,「10.8 中断点の設定と解除」を参照してください。
TDコマンドの場合,SET BREAKコマンドやRESET BREAKコマンドで,中断点を設定したり,解除したりできます。SET BREAKコマンドおよびRESET BREAKコマンドの詳細については,「12.4 TDコマンドの詳細」の「(19) SET BREAK/RESET BREAK(中断点の設定と解除)」を参照してください。
(2) データ監視条件の設定による中断
データの値を監視し,その状態によってプログラムを中断できます。監視したいデータの値に条件式を指定することもできます。
GUIモードの場合,[データの操作]メニューから[データ監視条件の設定]を選ぶと,データ監視条件が設定できます。設定した条件が成立したときに,プログラムが中断します。GUIモードでのデータ監視条件設定の詳細については,「10.9 データ監視条件の設定と解除」を参照してください。
TDコマンドの場合,SET WATCHコマンドやRESET WATCHコマンドで,データ監視条件を設定したり,解除したりできます。SET WATCHコマンドおよびRESET WATCHコマンドの詳細については,「12.4 TDコマンドの詳細」の「(25) SET WATCH/RESET WATCH(データ監視条件の設定と解除)」を参照してください。
データ監視条件の設定による中断の詳細は次のとおりです。
-
データ値の変化の監視
データ値が次の変化をしたときに,プログラムの実行が中断されます。
-
データ値が更新され変化した。
-
アドレス名によって参照されるデータの場合,アドレス不正(アドレスが設定されていない,不正なアドレスが設定されている)によって参照できない状態から,参照できる状態に変化した。または,参照できる状態から,アドレス不正(アドレスが設定されていない,不正なアドレスが設定されている)によって参照できない状態に変化した。
-
-
比較条件式の監視
比較条件式の判定結果が次のとき,プログラムの実行が中断されます。比較条件式の評価については,比較の規則(「9.3.1 データの比較・代入規則」の「(2) データの比較規則」)を参照してください。
-
比較条件式が,不成立の状態から,成立の状態に変わった(ただし,成立の状態からデータが変更されたとき,さらに成立の状態が継続しても,中断の状態とはならない)。
-
アドレス名によって参照されるデータの場合,アドレス不正(アドレスが設定されていない,不正なアドレスが設定されている)によって参照できない状態から,参照できる状態に変化したときに,比較条件式が成立した。
-
左辺・右辺の両方のデータが参照できるソース要素に制御が渡ったときに,比較条件式が成立した。
- (例)
-
次のプログラムに,(A > B)の比較条件式のデータ監視をすると一連番号3000の行で中断します。一連番号7000の行で比較条件式は成立しますが,すでに一連番号3000の行で成立していて,不成立な状態から成立な状態に変化したわけではないので中断されません。再び比較条件式が不成立な状態から成立の状態になり,中断されるのは一連番号11000の行となります。
プログラム 001000 MOVE 10 TO A. 002000 MOVE 5 TO B. 003000 〜 005000 〜 006000 MOVE 11 TO A. 007000 〜. 008000 MOVE 1 TO A. 009000 〜 010000 MOVE 10 TO A. 011000 〜
データの監視範囲については,「9.3.2 データ名・ファイル名が参照できる範囲」を参照してください。
-
- 注意事項
-
-
COBOLプログラムの連絡節や局所場所節に定義されたデータ項目および特殊レジスタは,次に示す実行単位ごとに,それぞれ異なるデータとして監視されます。
・オブジェクト指向のインスタンス単位
・シングルスレッドやマルチスレッドなどのスレッド単位
・再帰できるソース要素※の再帰単位
- 注※
-
再帰できるソース要素とは次のCOBOLプログラムを示します。
-
RECURSIVE指定を伴うプログラム
-
利用者定義関数
-
メソッド
-
-
左辺のデータがファクトリ定義(FACTORY)またはインスタンス定義(OBJECT)に定義されたデータのときは,右辺のデータには同じファクトリ定義またはインスタンス定義に定義されたデータが指定できます。
-
プログラムの中断時に,データ監視条件を設定した場合,監視対象データが参照できればその位置から,参照できなければ参照できる実行時要素に制御が渡ったときにデータの監視が開始されます。
-
(3) 割り込みによる中断
[中断]メニューから[割り込み中断]を選ぶと,プログラムの実行を強制的に中断できます。実行の強制中断の詳細については,「10.10.8 実行の割り込み中断」を参照してください。
- 注意事項
-
-
プログラムが次の状態にあるとき,割り込みによる中断はできません。
・-TDInfコンパイラオプションを付けずにコンパイルしたCOBOL2002の翻訳単位を実行している間。
・COBOL2002以外の言語で記述されたプログラムを実行している間。
・COBOL2002のソース要素の最後の出口から,プログラムの実行が終了するまでの間。
これらの状態のプログラムを途中で終了させるときは,タスクマネージャなどのWindowsのプロセス管理プロブラムから,プログラムを強制終了させてください。
-
ACCEPT文などによる画面入力の要求中は,画面への入力が行われたあとにプログラムが中断します。
-
(4) 実行時エラーが発生した場合の中断
GUIモードの場合,実行時エラーが発生したときプログラムが中断します。実行時エラーが発生した文で,プログラムの状態を調べることができます。この中断のための設定は特に必要ありません。
次の条件がすべて当てはまるときに,プログラムが中断します。
-
実行時エラーのメッセージのレベルがSまたはUのとき,または,CBLABNサービスルーチンによってユーザプログラムが終了したとき(KCCC0900R-Iのメッセージが表示されます)。
-
プログラムが,実行時エラーによって中断したあとに,データ参照などデバッガの操作の対象にできる状態であるとき。
-
-TDInfコンパイラオプションでコンパイルした翻訳単位で実行時エラーが発生したとき。
実行時エラーによってユーザプログラムが中断したときは,次の手順でユーザプログラムを続行できます。
-
データの値を変えるなどのデバッガの操作によって実行時エラーの原因を解決する。
-
実行時エラーの原因を解決したあとに,ジャンプまたはジャンプ実行によって,実行時エラーが発生した文を再び実行させる。
ただし,実行時エラーの種類によって,ジャンプまたはジャンプ実行ができない場合があります。ジャンプまたはジャンプ実行をしないで,ユーザプログラムを続行したときは,ユーザプログラムが終了します。