リモートデバッグは、ネットワーク上の別のコンピュータで動作しているプログラムをデバッグする機能です。
UNIX系プログラムの分散開発では、次の構成でリモートデバッグを行うことになります。
UNIX系サーバ
COBOLプログラムの動作しているコンピュータ
Windowsクライアント
COBOLデバッガのウィンドウが表示されるコンピュータ
ここでは、上記の構成でのリモートデバッグの機能の概要とそのためにUNIXサーバ側に設定が必要となるリモートデバッガコネクタについて説明します。
注意
Linux(Itanium) 64bit版 NetCOBOLではリモートデバッガを使用できません。
リモートデバッグには、デバッグ対象のプログラムとデバッガの関係から、2つの方式が存在します。ここでは、それぞれについて次のような点についての概要を説明します。
リモートデバッガ使用前の準備
デバッグの開始方法
デバッグ時に有効となる環境変数の設定
一般形式
COBOLプログラムをリモートデバッグする通常の方法です。
デバッグ対象のCOBOLプログラムが動作するUNIXサーバ側で、サーバ側のリモートデバッガコネクタが起動されている必要があります。
サーバ側のリモートデバッガコネクタの起動については、“2.1.3.2 リモートデバッグのためのサーバ側の環境設定”で詳細に説明します。
Windowsクライアント側のリモートデバッガからデバッグ対象プログラムを起動します。
実際のUNIXサーバ側でのデバッグは、Windowsクライアント側のデバッグ要求をUNIXサーバ上のデバッガに中継するためのリモートデバッガコネクタというプログラムを介して次のように行われます。
サーバ側のデバッガとそれに起動されるデバッグ対象プログラムに有効となる環境変数は、リモートデバッガコネクタが起動された際に有効であったものがそのまま引き継がれます。
同じリモートデバッガコネクタを使用してデバッグするプログラムに有効な環境変数は皆同じものとなってしまうため、COBOLプログラムの実行時に必要な環境変数をリモートデバッガコネクタ起動時の環境変数として与えることは、次のような不都合を生じます。
デバッグ対象プログラムを変更するごとにリモートデバッガコネクタの停止・環境変数の再設定・リモートデバッガコネクタの再起動を繰り返すことが必要となる。
予めデバッグ対象のプログラムすべてが必要とする環境変数を設定した上で、リモートデバッガコネクタ起動することが必要となる。
したがって、リモートデバッグ時にデバッグ対象のプログラムが参照する環境変数は別の形で与えることが必要です。
これには、次の機能が使用できます。
リモートデバッガによって、デバッグ対象のCOBOLプログラムを起動する際、実行時パラメタを与えることができる。
COBOLプログラムは、必要な環境変数の設定を記述したファイルの名前(初期化ファイル)を実行時パラメタとして受け取ることができる。
したがって、一般形式でリモートデバッグする際の環境変数の設定は次のように行うべきです。
どのプログラムをデバッグする場合でも、常に必要で同じ値を持つ環境変数をリモートデバッガコネクタの起動時の環境変数として設定する。
プログラムごとに必要となる環境変数は、プログラムごとに用意する初期化ファイルに指定し、リモートデバッグの開始時に与える実行時パラメタでこの初期化ファイル名を指定する。
アタッチ形式
一般形式でデバッグを行う場合、デバッガの起動画面からデバッグ対象プログラムを含む、または呼び出す実行可能プログラムを指定する必要があります。しかし、システムのサービスとして起動されるようなプログラム(以降の説明ではサーバプログラムと呼びます)から、デバッグ対象となるCOBOLプログラムが呼び出されるような場合、これができません。アタッチ形式のデバッグをそのような場合に使用します。
次のようなCOBOLプログラムが該当します。
Webサーバ配下のCOBOLプログラム
Interstage配下のCOBOLプログラム
リモートデバッグを行うWindowsクライアントで、クライアント側のリモートデバッガコネクタが起動されている必要があります。
クライアント側のリモートデバッガコネクタの起動については、“第4章 サーバ環境での開発作業”で詳細に説明します。
また、UNIXサーバ側にリモートデバッグを行うWindowsクライアントを指定するための設定が必要です。これについては、“2.1.3.2 リモートデバッグのためのサーバ側の環境設定”で説明します。
デバッグ対象のCOBOLプログラムが呼び出された際に、COBOLプログラムからWindowsクライアント側のリモートデバッガを起動する形でデバッグを行います。
Windowsクライアント側のリモートデバッガの起動は、UNIXサーバ側のデバッガのデバッグ要求を、Windowsクライアント側のリモートデバッガに中継するためのリモートデバッガコネクタというプログラムを介して次のように行われます。
サーバ側のデバッガとそれを起動するデバッグ対象プログラムに有効となる環境変数は、COBOLの実行環境が次のようにして、決定したものです。
サーバプログラムを起動した際の環境変数の設定を引き継ぐ。
サーバプログラムから最初に呼び出されるCOBOLプログラムに対して、初期化ファイルが用意されていないなら、1で引き継いだものがそのまま有効となる。
サーバプログラムから最初に呼び出されるCOBOLプログラムに対して、初期化ファイルが用意されているなら、初期化ファイルの内容でサーバプログラムを起動した際の環境変数の設定を上書きする。同じ環境変数に対して、サーバプログラムの起動時の指定と初期化ファイルの指定で異なる値が指定されているなら、初期化ファイルで指定した環境変数の値が有効となる。
上記のように決定された環境変数の情報は、サーバプログラムが終了するまで有効です。
同じサーバ配下で動作する複数のCOBOLプログラムの間で、それぞれ異なる環境変数の値を指定することはできません。
ここでは、リモートデバッグを行うために、UNIXサーバ側で実施する必要のある環境設定の詳細について説明します。
サーバ側リモートデバッガコネクタ
一般形式(Windowsクライアントのデバッガからプログラムを起動)でリモートデバッグを行う場合に、Windowsクライアントからのリモートデバッグ要求を受け取るために起動します。
サーバ側リモートデバッガコネクタは、UNIXサーバ上で起動され、Windowsクライアント側からのリモートデバッグ要求を待ち受けるプログラムです。
もっとも単純には、telnet端末などでUNIXサーバに接続して、次のようにして起動します(以降の例では、UNIXサーバのIPアドレスは“192.168.0.103”であるものとして説明します)。
例
サーバ側リモートデバッガコネクタ起動例(1)
# svdrds 192.168.0.103:59998 Press Ctrl+C To End
起動時に表示されるメッセージは、Windowsクライアントからのリモートデバッグ要求を持ち受けるIPアドレスとポート番号を示しています(ポート番号59998はデフォルト値です)。
この状態で、このネットワークに接続されているすべてのWindowsクライアントからのリモートデバッグ要求を受け付け、UNIXサーバ側の複数の異なるプログラムを同時にリモートデバッグすることが可能です。しかし、このような使い方をお勧めできるのは、1人の開発者がリモートデバッグを行う場合、あるいは複数の開発者が同時にリモートデバッグを行わない場合だけです。
複数プログラムのデバッグ中、次のような出力が、区別されることなくリモートデバッガコネクタを起動したtelnet端末に表示されるためです。
標準入力(SYSIN)を宛先とするACCEPT文の入力
標準出力(SYSOUT)、標準エラー出力(SYSERR)を宛先とするDISPLAY文の出力
実行時のエラーメッセージ
複数の開発者が同時にリモートデバッグ機能を使用する場合、開発者毎に使用するポート番号を予め決めておいて、リモートデバッグ機能を使用する開発者がそれぞれ自分用にサーバ側のリモートデバッガコネクタを起動します。
以下にその例を示します。
例
サーバ側リモートデバッガコネクタ起動例(2)
# svdrds -p 10000 -h client-1 192.168.0.3:10000 Press Ctrl+C To End
ここでは、サーバ側のリモートデバッガコネクタは次のような意味を持ちます。
リモートデバッグ要求を受け付けるポート番号を10000番としている。
リモートデバッグ要求を受け付けるWindowsクライアントをclient-1に制限している。
このように指定してサーバ側リモートデバッガコネクタを起動した場合、誤って他の開発者(例えば、client-2)がこのリモートデバッガコネクタにデバッグ要求を送ったとしても、その要求は拒否されます。
なお、リモートデバッガコネクタを起動する際の指定の詳細は続いて説明します。
注意
次の理由から、UNIXサーバ側のリモートデバッガコネクタをシステムの起動時にシステムのサービスのような形態で使用するべきではありません。
起動時のメッセージ以外にリモートデバッガコネクタの使用しているポート番号を調べることができない。
リモートデバッガコネクタを終了させるためのコマンドが用意されていない。
ここでは、サーバ側のリモートデバッガコネクタの起動形式を説明します。
svdrds [ポート指定] [接続制限指定]
起動時に次の形式でポート指定と接続制限指定をすることができます。
Windowsクライアント側からのリモートデバッグ要求を監視するためのポート番号を指定します。次の形式で指定します。
-p ポート番号
指定形式 | 内容 |
---|---|
-p ポート番号 | 監視するポート番号を1024から65535の範囲の数字で指定します。 |
注意
ポート指定を省略した場合は、標準のポート(59998)を監視します。
リモートデバッグを許可するWindowsクライアントを制限するための指定です。接続制限ファイルの内容については、“接続制限と接続制限ファイル”で説明します。
{-h ホスト名 | -s 接続制限ファイル名[ -e ]}
指定形式 | 内容 |
---|---|
-h ホスト名 | 接続を許可するホスト名またはIPアドレスを一つだけ指定します。 |
-s 接続制限ファイル名 | 接続制限ファイルを指定します。 |
-e | 接続制限ファイルに指定された内容を処理した結果、どのような接続制限が行われるようになったかを表示します。 |
-s、-h共に省略した場合は、すべてのコンピュータからの接続を許可します。
接続制限とは、サーバ側のリモートデバッガコネクタがリモートデバッグ要求を受け付けるWindowsクライアントを制限する方法です。
ただ1つのWindowsクライアントにリモートデバッグを許すような場合は、サーバ側リモートデバッガコネクタ起動時に-hオプションで指定します。より複雑な指定が必要な場合は、接続制限ファイルを使用します。
接続制限ファイルは以下で説明する形式の指定を含むテキストファイルです。ファイル名として任意の名前を使用することができます。
接続制限を行う接続制限ファイルは、以下の形式で指定します。
[ ALLOW={ ALL | 接続対象[接続対象...] } ] [ DENY={ ALL | 接続対象[接続対象...] } ]
ALLOWに指定された接続対象からの接続を許可します。省略した場合はALLを指定したものとみなされます。
DENYに指定された接続対象からの接続を拒否します。省略した場合はALLを指定したものとみなされます。
ALLを指定した場合は、すべてのコンピュータからの接続を許可、または拒否します。
ALLOWとDENYの指定が重複する場合、ALLOWの指定を記述していると、ALLOWの指定が優先されます。
複数行に渡って記述する場合は、末尾に\を書きます。
例
ALLOW=192.168.0.1 192.168.0.3 \ 192.168.0.8-192.168.0.10
“表2.6 接続対象の指定形式”に接続対象の指定形式を示します。
指定形式 | 指定例 | IPアドレスの適用範囲例 |
---|---|---|
IPアドレス指定 | 192.168.0.1 | 192.168.0.1 |
範囲指定 | 192.168.0.1-192.168.0.10 | 192.168.0.1 ~ 192.168.0.10 |
ワイルドカード | 192.168.0.* | 192.168.0.0 ~ 192.168.0.255 |
ホスト名 | hostname | 192.168.0.1 |
ワイルドカードに指定できる“*”は、各オクテッドに指定できます。
オクテッドとは、10進数部分を“.”単位に区切った範囲です。
IPアドレス192.168.0.1に対して、hostnameという名前のホスト名が割り当てられている場合の例です。
注意
なお、接続制限ファイルの内容に誤りがある場合は、接続制限ファイルによる指定が無効になり、すべてのコンピュータからの接続を許可します。
“表2.7 接続制限の代表例”に一般的な接続制限の方式とその際の接続制限ファイルの内容について示します。
接続制限 | 接続制限ファイルの内容 |
---|---|
特定の接続対象のみを許可する。 接続を許可するIP アドレスが、以下の場合
| ALLOW=192.168.0.1 DENY=ALL |
複数の接続対象からの接続を許可する。 接続を許可するIP アドレスが以下の場合
| ALLOW=192.168.0.1 \ 192.168.0.2 192.168.0.10 DENY=ALL |
特定範囲の接続を許可する。 接続を許可するIP アドレスの範囲が以下の場合 下限:192.168.0.1 上限:192.168.0.10 | ALLOW=192.168.0.1-192.168.0.10 DENY=ALL |
オクテッド単位に接続を許可する。 接続を許可するIP アドレスの範囲が以下の場合 下限:192.168.0.0 上限:192.168.0.255 | ALLOW=192.168.0.* DENY=ALL |
すべてのコンピュータからの接続を許可する。 | ALLOW=ALL DENY=ALL |
環境変数CBR_ATTACH_TOOL
アタッチ形式(サービスなどからCOBOLプログラムが呼び出される際にデバッガが起動される)でリモートデバッグを行う場合、リモートデバッガを起動するWindowsクライアントを指定するために設定します。
環境変数CBR_ATTACH_TOOLは、アタッチ形式でリモートデバッグを行う際のWindows側クライアントを指定します。
アタッチ形式のデバッグの対象とするサーバプログラムから呼び出されるCOBOLプログラムに有効となる環境変数は、基本的にサーバプログラムの起動時に有効であった環境変数です。
このため、サーバプログラムの起動スクリプトあるいは、起動スクリプトに先立って実行されるシステムのデフォルトの環境変数などに、例えば次のような指定を追加します。
CBR_ATTACH_TOOL="client-1/TEST"
この指定はclient-1というWindowsクライアントをサーバプログラムから呼び出されるCOBOLプログラムのリモートデバッグに使用することを指定します。
サーバプログラムから呼び出されるプログラムは、同じ環境、資源、プロセス等を共有するため、複数のプログラムを同時にデバッグすることはお勧めしません。このため、サーバプログラムから呼び出されるプログラムをリモートデバッグする際には、専用のWindowsクライアントを使用してください。
ここでは、環境変数CBR_ATTACH_TOOLの指定形式を説明します。
CBR_ATTACH_TOOL=接続先/TEST [起動パラメタ]
接続先には、Windowsクライアント側のリモートデバッガコネクタの位置とポート番号を以下の形式で指定します。
{IPアドレス | ホスト名}[ : ポート番号 ]
ポート番号は、1024から65535の範囲の数字でなければなりません。ポート番号の指定を省略した場合は、59999が指定されたとみなされます。
例
〔IPアドレス(192.168.0.1)での指定〕
CBR_ATTACH_TOOL="192.168.0.1:2000/TEST"
〔ホスト名(client-1)での指定〕
CBR_ATTACH_TOOL="client-1:2000/TEST"
〔ポート番号省略の指定〕
CBR_ATTACH_TOOL="192.168.0.1/TEST"
起動パラメタには、デバッガに渡す起動パラメタを指定することができます。リモートデバッグを行う場合、次の起動パラメタが有効です。
指定形式 | 内容 |
---|---|
-G 開始プログラム名 | 〔デバッグを開始する〕ダイアログでの開始プログラム名を指定します。 |
-B コマンドファイル名 | 〔デバッグを開始する〕ダイアログでのコマンドファイル名を指定します。 |
-L 操作履歴ファイル名 | 〔デバッグを開始する〕ダイアログでの操作履歴ファイル名を指定します。 |
-N | 〔デバッグを開始する〕ダイアログを表示しないで、デバッグを開始します。 |
なお、これらの起動パラメタはバッチデバッグを行うときに使用します。バッチデバッグについては、"4.4.1.3 デバッグ操作の自動化"を参照してください。