「デバッグの目的で」とはどういう意味かわからないので、あなたの質問を正しく理解できれば幸いですが、次のようになります。
同じセッションのメモリにロードされている別のプログラムの変数にアクセスするには、次のコマンドを使用します(コールスタックにある必要はないと確信しています)。
ASSIGN ('(PROGRAM)VARIABLE') TO LV_LOCAL.
参照変数を使用すると、少し注意が必要になりますが、ここでは説明に役立つ例を示します。
LR_TEST
これは、別の場所にアクセスしたい参照変数を含む呼び出しプログラムです。デモンストレーションの目的で、ローカルで定義されたクラスを参照します(これは、あなたの質問から収集したものだからです)。
REPORT ZCALLER.
class lcl_test definition.
public section.
data: myval type i.
methods: my_meth exporting e_val type i.
endclass.
data: lr_test type ref to lcl_test.
CREATE OBJECT lr_test.
lr_test->MYVAL = 22.
perform call_me(zcallee).
class lcl_test implementation.
method my_meth.
* Export the attribute myval as param e_val.
e_val = myval.
endmethod.
endclass.
上記のプログラムから変数にアクセスしたいプログラムは次のとおりです。
REPORT ZCALLEE.
form call_me.
field-symbols: <ref>.
data: ld_test type ref to object.
data: lv_val type i.
* Exhibit A: Gettinf a reference to a 'foreign' object instance
assign ('(ZCALLER)LR_TEST') to <ref>.
* <ref> now contains a reference to the class instance from the program
* ZCALLER (not very useful, except for passing around maybe)
* Exhibit B: Getting a public attribute from a 'foreign' class instance
assign ('(ZCALLER)LR_TEST->MYVAL') to <ref>.
* <ref> now contains the value of the attribute MYVAL
* Exhibit C: Getting a reference to an instance and calling a method
assign ('(ZCALLER)LR_TEST') to <ref>. "Again the class reference
if sy-subrc = 0. "Rule: Always check sy-subrc after assign before
"accessing a field symbol! (but you know that)
ld_test = <ref>. "Now we have a concrete handle
* Now we make a dynamic method call using our instance handle
CALL METHOD ld_test->('MY_METH')
IMPORTING
e_val = lv_val.
endif.
endform.