Cobol z/OS:如何在调试模式下确定调用参数?

Cobol z/OS: how to determine calling parameters in debug mode?

提问人:user11654732 提问时间:5/2/2023 更新时间:5/15/2023 访问量:110

问:

对于 z/OS Cobol,linkage-section 定义了可以与其他程序共享的数据结构。

我想问的是:当我使用 z/OS 调试器调试 cobol 程序时,有没有办法显示已传递给程序的变量及其内容? 换言之:调用程序使用“by reference”或“by content”限定符调用了子程序。有没有办法在调试器的调用程序中显示这些数据结构?

谢谢!

调试 COBOL ZOS

评论

0赞 Simon Sobisch 5/2/2023
您不能也检查呼叫者的状态吗?在这种情况下,只需切换到来电者并直接查看即可?
0赞 user11654732 5/3/2023
@SimonSobisch:我不知道如何动态切换到来电者。我可以在调用方中开始调试,当调用子程序时,查看传递的数据结构。只是在一个很长的调用链中,我经常发现自己处于子程序中的情况,显示调用变量 + 内容会很有帮助。我确信调试器“知道”,但我不知道没有办法临时提取该信息......谢谢!
0赞 piet.t 5/3/2023
使用哪个接口进行调试?3270 MFI 还是基于 eclipse 的远程调试器?
0赞 user11654732 5/3/2023
@piet.t 我直接在主机上使用 TSO 会话,然后调用“dtcn”来激活调试器

答:

1赞 piet.t 5/3/2023 #1

免责声明:由于目前我没有用于测试的 COBOL 环境,因此我的描述是使用 PL/I 程序测试的。COBOL 的工作方式应该类似,但可能需要一些小的更正。随意编辑您注意到的任何内容。

虽然在 GUI 界面中更容易(就像在调用堆栈中单击正确的条目一样简单),但您也可以使用 .

假设您有一个主程序 MYPROG,调用子程序 SUBPROG。调试器在 SUBPROG 中的某个位置停止后,可以使用以下命令

SET QUALIFY BLOCK MYPROG

将调试上下文切换到主程序。在那里,您应该能够列出当时在 MYPROG 中处于活动状态的任何变量。 在 COBOL 中,您还可以尝试使用

SET QUALIFY RETURN

在调用堆栈上上移动 1 级,或者

SET QUALIFY PROGRAM MYPROG

两者都不适用于 PL/I(它们最终比所需的 BLOCK 高出一个资格级别)。

要返回到当前调试位置,请发出以下命令

SET QUALIFY RESET

既然你提到了DTCN,我假设你在CICS环境中运行。这可能会增加额外的复杂性:上面描述的上下文切换只能跨 COBOL 语句工作,而不能跨 .后者将创建一个全新的语言环境飞地,因此从 LE(以及调试器)的角度来看,有两个完全独立的主程序调用。CALLEXEC CICS LINK

评论

0赞 user11654732 5/17/2023
很棒的命令集,我才刚刚开始理解它们的全部潜力!
1赞 Randy Campbell 5/15/2023 #2

在调用的 COBOL 程序中,您还可以发出命令来显示 .下面是一个简单的示例:LIST TITLED LSLINKAGE SECTION

LIST TITLED LS ;                                           
The following variables are known in section Linkage Section
01 IBCC20A:>THIS-DATE  = 20280515

评论

0赞 user11654732 5/17/2023
非常有用的谢谢!- 它似乎适用于其他 namend 部分,例如标题为 WS 的列表