0

コールスタックでプログラム名を特定する方法はありますか? つまり、PGM B にリンクする PGM X があり、これは PGM C にリンクします。次に、C で、どのプログラムが呼び出し (PGM X) を発信したかを知りたいですか?

4

3 に答える 3

1

これはできますが、少しアセンブラが必要です。基本的に、保存領域を追跡し、戻りアドレスで CSVQUERY を実行する必要があります。これにより、その保存領域を所有するモジュールの名前が得られます。

Cobol ランタイム モジュール (接頭辞 IGZ) や Language Environment モジュール (接頭辞 CEE) に注意する必要があります。Cobol Call を実行すると、呼び出したプログラムを呼び出すランタイム モジュールが呼び出されます。

また、これは EC LINK または EC XCTL を実行したプログラムを識別するのではなく、OS 保存域規則を使用する Cobol Call 呼び出しのみを識別します。

例:

CSVQUERY SEARCH=JPALPA,INADDR=<R14_from_savearea>,OUTEPNM=<module_name_output>,MF=(E,PLIST)

保管域チェーンの戻りアドレスごとにこれを繰り返し行うと、すべての呼び出し元がわかります。

于 2015-05-08T19:49:38.477 に答える
0

これを行う方法はサポートされていません。保存領域を追跡し、実行可能コードを調べてその名前を特定しようとする人もいますが、すべてが涙で終わるのではないかと思います。

問題の 1 つは、LINK または XCTL がどのように実装されているかを保証できないことです。動的呼び出しの場合、保管域チェーンをたどることができるかもしれませんが、モジュールを識別する方法を理解する必要があります。COBOLだけでできることではありません。

于 2015-05-08T11:29:27.743 に答える