モジュールが動的に呼び出されているか、静的に呼び出されているかを確認するにはどうすればよいですか?
5 に答える
z / OSで操作している場合、これを達成することはできますが、それは簡単ではありません。
まず、保存領域チェーンをトレースし、CSVQUERYを使用して、各保存領域を所有しているプログラムを見つける必要があります。他のすべてのプログラムは、IGZCPACのようなCobolランタイムモジュールになります。IMS、CICS、TSOなどでは、これらのモジュールは異なる場合があります。それは簡単な部分です。
関連するすべての保存領域の所有者がわかったら、OS LOADER / BINDER / LINKERユーティリティを使用して、同じモジュールに含まれるアーティファクトを検出できます。これは簡単ではない部分です。
唯一の方法は、リンケージエディタ(IEWL)の出力またはロードモジュール自体を確認することです。モジュールが動的に呼び出されている場合はメインモジュールに存在せず、静的に呼び出されている場合はロードモジュールに表示されます。プログラム名を含む作業用ストレージ変数を呼び出しても、DYNAMIC呼び出しは行われません。このタイプの呼び出しは、モジュールの名前が作業用ストレージ変数の内容によって暗示されるため、IMPLICITE呼び出しと呼ばれます。プログラム名リテラルを呼び出す。
プログラム名を含む作業領域変数を呼び出しても、DYNAMIC 呼び出しは行われません。
はい、そうです。呼び出し variablename は常にDYNAMIC です。Call 'literal' は、DYNAM/NODYNAM コンパイラ オプションに従って動的または静的です。
警告: これは IBM メインフレーム COBOL に適用され、標準の一部でもあると思います。他の非標準バージョンの COBOL には適用されない場合があります。
Micro Focus COBOL の場合、静的リンクは、呼び出しの呼び出し規則(ビット 3) またはコンパイラ ディレクティブLITLINKを介して制御されます。
静的にリンクする場合、プログラム ID/エントリ ポイントと呼び出し自体の大文字と小文字が重要であるため、正確であることを確認してCASEディレクティブを使用することをお勧めします。
LITLINK ディレクティブの逆は、NOLITLINK ディレクティブまたはビット 3 が設定されていない呼び出し規約です!
Windows では、「dumpbin /exports」ユーティリティを使用して .dll でエクスポートされたシンボルを確認でき、Unix では「nm」ユーティリティを使用して確認できます。
「cbllink」で作成された .dll のインポート .lib は、cbllink で「-K」コマンド ライン オプションを使用して作成できます。
呼び出しステートメントを見てください。呼び出されるプログラムがリテラルで記述されている場合、それは静的呼び出しです。呼び出されるプログラムが実行時に決定される場合、動的呼び出しと呼ばれます。
* Static call
call "THEPROGRAM"
* Dynamic call
call wsProgramName